我从bash脚本运行以下命令:
myProgram --name test1 --index 0
但是现在我想在python脚本中运行它,所以我尝试了以下内容:
#!/usr/bin/python
from threading import Thread
import time
import subprocess
print "hello Python"
subprocess.Popen("myProgram --name test1 --index 0")
但我收到错误:
hello Python
Traceback (most recent call last):
File "./myPythonProgram.py", line 8, in <module>
subprocess.Popen("myProgram --name test1 --index 0")
File "/usr/lib64/python2.6/subprocess.py", line 623, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1141, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
这是调用它的正确方法吗?
答案 0 :(得分:2)
您需要将命令作为列表传递:
subprocess.Popen("myProgram --name test1 --index 0".split())
修改强>
str.split()
不会考虑shell元字符/标记,因此不安全。您应该使用shlex.split()
代替:
import shlex
command = shlex.split("myProgram --name test1 --index 0")
subprocess.Popen(command)
答案 1 :(得分:2)
您需要将其作为list
传递,或者您需要将参数设为shell=True
试试这个:
output = subprocess.Popen("myProgram --name test1 --index 0", shell=True, universal_newlines=True)
out, err = output.communicate()
print(out)
universal_newlines
参数将输出作为字符串,而不会将输出中的换行符更改为\n
。
如果您不想将输出存储在变量中并且只想在控制台中获取输出,请尝试subprocess.call()
或subprocess.run()
,如果您有 Python 3.5 强>