我有一些Python代码,想要调用另一个程序。这个程序会:
- 向
STDOUT
打印一些输出 - 将文件写入磁盘
使用call
函数会得到以下行为:
from subprocess import call
call(['./tango_x86_64_release', 'VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"'])
34, File not properly written, try writing it up again,
1
无论参数是否拆分成列表,这种情况都会发生;
call(['./tango_x86_64_release', 'VTS1', 'ct="N"', 'nt="N"', 'ph="7.2"', 'te="303"', 'io="0.02"', 'seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"'])
34, File not properly written, try writing it up again,
1
我可以从终端中调用相同的命令。
./tango_x86_64_release VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"
这个命令能够正常运行,并且退出状态码为0。
似乎是写入磁盘的问题导致了出现问题,如果我打断这个命令,那么会出现相应的警告信息(比如:移除一个参数,就会提示缺少该参数)。
使用subprocess.Popen()
会产生一个OSError
;
import subprocess as sub
output = sub.Popen('./tango_x86_64_release VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"', stdout=sub.PIPE, stderr=sub.PIPE)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
任何帮助都非常感激。
Popen
调用中添加shell=True
。 - alecxe