我试图使用subprocess
从另一个运行一个python程序。这是我到目前为止所具备的功能:
def runProcess(exe):
p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(True):
retcode = p.poll() #returns None while subprocess is running
line = p.stdout.readline()
yield line
if(retcode is not None):
break
然后我跑:
for line in runProcess('python myotherprogram.py'): print line
但我收到OS error: no such file
,但它并没有告诉我哪些文件不存在。这令人费解。有什么建议?我可以将runProcess
函数用于普通终端命令,例如ls
。
答案 0 :(得分:4)
不存在的是名为python myotherprogram.py
的单个可执行文件。要指定参数,您需要提供一个由命令及其参数组成的列表,例如runProcess(["python", "myotherprogram.py"])
,或者为shell=True
构造函数指定Popen
。
documentation的相关引用:
args 应该是一系列程序参数,否则就是一个 串。默认情况下,要执行的程序是 args 中的第一项 如果 args 是一个序列。 如果 args是一个字符串,则解释为 平台依赖并在下面描述。查看shell和可执行文件 与默认行为的其他差异的参数。除非 除非另有说明,建议将 args 作为序列传递。
在Unix上,如果 args 是一个字符串,则该字符串被解释为名称或 要执行的程序的路径。但是,只有在没有的情况下才能这样做 将参数传递给程序。