【问题标题】:Appending subprocess output to file from Python script从 Python 脚本将子进程输出附加到文件
【发布时间】:2012-10-29 17:26:48
【问题描述】:

我有一个 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 )

有人知道我做错了什么吗?

【问题讨论】:

    标签: python popen system-calls output-redirect


    【解决方案1】:

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

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

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

    【讨论】:

    • 据我所知,这需要我修改我正在调用的程序的行为。这不是我能做的。
    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2023-03-16
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多