我有这段代码可以在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传输的数据。
答案 0 :(得分:0)
尝试在子流程args中使用sys.executable
而不是'python'
。我认为这是因为Python不在Windows上的PATH中。
同时检查self.file_to_run
和self.input_file
的值,这些值必须是字符串,而不是None或奇怪的东西,但这可能不会导致OSError
。