Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python脚本向文件追加子流程输出_Python_Popen_System Calls_Output Redirect - Fatal编程技术网

从Python脚本向文件追加子流程输出

从Python脚本向文件追加子流程输出,python,popen,system-calls,output-redirect,Python,Popen,System Calls,Output Redirect,我有一个python脚本,它循环遍历一些数据并每次调用一个子流程,将数据作为流程参数的一部分传入。我想将每个调用的输出附加到一个文件中,以便稍后在脚本中使用该输出 我尝试过使用os.system并在命令后添加“>>outfile.txt”。但是,在这种情况下,由于某种原因,第一次迭代作为正常情况输出到shell,并且只有最后一次迭代附加到文件中 def runSpecificList( streamList ): for line in open( streamList, 'r' ):

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

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

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

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


请参阅:

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

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


请参阅:

据我所知,这需要我修改正在调用的程序的行为。这不是我能做的。据我所知,这需要我修改我调用的程序的行为。那不是我能做的。