简体   繁体   中英

python subprocess is working in interactive mode but in not script

In windows I have to execute a command like below:

process = subprocess.Popen([r'C:\Program Files (x86)\xxx\xxx.exe', '-n', '@iseasn2a7.sd.xxxx.com:3944#dc', '-d', r'D:\test\file.txt'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
process.communicate()

This works fine in python interactive mode, but not at all executing from the python script.

What may be the issue ?

Popen.communicate itself does not print anything, but it returns the stdout, stderr output. Beside that because the code specified stdout=PIPE, stderr=... when it create Popen , it catch the outputs (does not let the sub-process print output directly to the stdout of the parent process)

You need to print the return value manually:

process = ....
output, error = process.communicate()
print output

If you don't want that, don't catch stdout output by omit stdout=PIPE, stderr=... .

Then, you don't need to use communicate , but just wait :

process = subprocess.Popen([...], shell=True)
process.wait()

Or, you can use subprocess.call which both execute sub-process and wait its termination:

subprocess.call([...], shell=True)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM