我有一个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 )
任何人都知道我做错了什么?
答案 0 :(得分:1)
问题在于您的进程未同步,因此它们以随机顺序打印输出(基于执行顺序)。
您可以使用Queue
将输出返回到主进程(产生其他进程的进程),然后对其进行操作。
请参阅:http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes