检查python中的子进程

时间:2014-06-16 05:49:19

标签: python subprocess

我试图使用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

1 个答案:

答案 0 :(得分:4)

不存在的是名为python myotherprogram.py的单个可执行文件。要指定参数,您需要提供一个由命令及其参数组成的列表,例如runProcess(["python", "myotherprogram.py"]),或者为shell=True构造函数指定Popen

documentation的相关引用:

  

args 应该是一系列程序参数,否则就是一个   串。默认情况下,要执行的程序是 args 中的第一项   如果 args 是一个序列。 如果 args是一个字符串,则解释为   平台依赖并在下面描述。查看shell和可执行文件   与默认行为的其他差异的参数。除非   除非另有说明,建议将 args 作为序列传递。

     

在Unix上,如果 args 是一个字符串,则该字符串被解释为名称或   要执行的程序的路径。但是,只有在没有的情况下才能这样做   将参数传递给程序。