2011-12-14 84 views
1

我有這段在Linux上正常工作但在Windows上失敗的代碼。創建進程很好,但我得到一個錯誤,並沒有從管道中讀取: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

命令是否在shell上工作?我知道,愚蠢的問題,但只是確保。我通常會構建命令字符串並輸出,然後手動運行以確保它可以正常工作。之後,我通常使用shlex來處理參數解析。 – pcalcao 2011-12-14 15:09:50

回答

0

嘗試在子流程參數中使用sys.executable而不是'python'。我認爲這是因爲Python不在Windows的PATH中。

另外檢查self.file_to_runself.input_file的值必須是字符串而不是無或奇怪的東西,但這可能不會導致OSError