2011-12-14 7 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

コマンドはシェル上で動作しますか?愚かな質問、私は知っているが、確かにしている。私は通常、コマンド文字列を作成して出力し、それを手動で実行して、動作することを確認します。その後、私は通常引数の解析を処理するためにshlexを使用します。 – pcalcao

+0

@マリン:ping!あなたはその問題を解決しましたか? –

+0

@gurneyalex残念ながら、いいえ... – Marin

答えて

0

サブプロセスargsに'python'の代わりにsys.executableを使用してみてください。これはPythonがWindows上のPATHにないためだと思います。

self.file_to_runself.input_fileの値も文字列で、[なし]または[奇妙なもの]でない必要がありますが、これはおそらくOSErrorにはなりません。

関連する問題