Windows上的子进程管道输出

时间:2011-12-14 13:45:43

标签: python subprocess stdout

我有这段代码可以在Linux上运行正常但在Windows上运行失败。进程创建正常,但是我收到一个错误,没有从管道中读取任何内容:

    p = subprocess.Popen(['python', '-u', self.file_to_run,
                                   '-s', '-g', '-i', self.input_file],
                                   universal_newlines=True,
                                   stdout=subprocess.PIPE)
    ...
    out = p.stdout.readline().rstrip()

我得到的错误是

Traceback (most recent call last):
  File "bench.py", line 59, in <module>
    multi.add_process()
  File "bench.py", line 47, in add_process
    stdout=subprocess.PIPE)
  File "c:\python\v2.5.1-ast3\...\lib\subprocess.py", line 615, in __init__
    self.stdout = os.fdopen(c2pread, 'rU', bufsize)
OSError: [Errno 22] Invalid argument

我实际上创建了多个这样的进程,并根据它们的输出计算了一些值,但这是无关紧要的。我需要做的是,多次使用某些参数运行脚本,并解析从每个进程的stdout传输的数据。

1 个答案:

答案 0 :(得分:0)

尝试在子流程args中使用sys.executable而不是'python'。我认为这是因为Python不在Windows上的PATH中。

同时检查self.file_to_runself.input_file的值,这些值必须是字符串,而不是None或奇怪的东西,但这可能不会导致OSError