从Python脚本将子进程输出附加到文件

时间:2012-10-29 17:26:48

标签: python popen system-calls output-redirect

我有一个python脚本,它循环遍历一些数据并每次调用一个子进程,将数据作为进程参数的一部分传递。我想将每个调用的输出附加到文件中,以便稍后在脚本中使用该输出。

我已尝试使用os.system并在命令后放置“>> outfile.txt”。但是,在这种情况下,由于某种原因,第一次迭代正常输出到shell,只有最后一次迭代被附加到文件中。

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 )

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于您的进程未同步,因此它们以随机顺序打印输出(基于执行顺序)。

您可以使用Queue将输出返回到主进程(产生其他进程的进程),然后对其进行操作。

请参阅:http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes