Python - 无法调用系统命令

时间:2013-06-28 19:36:40

标签: python subprocess

我有一些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

任何帮助非常感谢

2 个答案:

答案 0 :(得分:3)

使用shlex.split为您分割命令:

import shlex
call(shlex.split('./tango_x86_64_release VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"'))

请注意,尽管您可以通过添加shell=True来解决问题,但如果可能,您应该避免使用它,因为它可以是security risk(搜索“shell注入”)。

答案 1 :(得分:1)

尝试将shell=True添加到Popen来电。

另见: