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

标签 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 )

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

最佳答案

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

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

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

关于python - 将子进程输出从 Python 脚本附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126645/

相关文章:

c++ - 跟踪/系统调用 "Print Screen"进程

c - 为什么 execve 系统调用可以在没有任何 argv 参数的情况下运行 "/bin/sh"而不是 "/bin/ls"?

python - 在 windows 7 中为 python 3.5 安装 pywin32

python - 如何阻止 setup.py 尝试在 MacOSX 构建中包含 -arch ppc?

c - 在没有cmd.exe弹出窗口的情况下使用C中的popen在Windows上执行任务列表

locking - popen - 锁还是不是线程安全的?

linux - 在系统调用中创建用户

python - 在 Python 2.7 中使用 Unicode 转义时出现奇怪的问题

python - 如何将多个文件上传到 BlobStore?

python - subprocess.Popen() IO 重定向