1

一部のデータをループして毎回サブプロセスを呼び出し、プロセスの引数の一部としてデータを渡す Python スクリプトがあります。各呼び出しの出力をファイルに追加して、後でその出力をスクリプトで使用できるようにします。

os.system を使用して、コマンドの後に ">> outfile.txt" を追加してみました。ただし、この場合、何らかの理由で最初の反復が通常どおりシェルに出力され、最後の反復のみがファイルに追加されます。

def runSpecificList( streamList ):
    for line in open( streamList, 'r' ):
        getSpecificStream( 'list.txt', line )


def getSpecificStream( testList, id ):
    os.system( os.environ['path'] + r'\sub\path\to\program.exe argument' + id + ' >> ' + list )

これは subprocess.popen() を使用して達成できる可能性があることがわかったので、試してみました...ただし、今回は最初の繰り返しがファイルに書き込まれ、残りの時間はファイルに書き込まれたものがランダムなフラグメントのように見えました. また、何らかの理由でスクリプトの後半でファイルを適切に使用できませんでした。

def getSpecificStream( testList, id ):
     log = open( testList, 'a' )
     subproc.Popen([os.environ['path'] + r'\sub\path\to\program.exe', 'argument' + id], stdout = log, stderr = log, shell = True )

誰が私が間違っているのか知っていますか?

4

1 に答える 1

1

問題は、プロセスが同期されていないため、(実行の順序に基づいて) ランダムな順序で出力を出力することです。

a を使用しQueueて、出力をマスター プロセス (他のプロセスを生成するプロセス) に返し、それを操作することができます。

参照: http://docs.python.org/2/library/multiprocessing.html#exchange-objects-between-processes

于 2012-10-29T18:30:36.020 に答える