MA1*_*MA1 6 python subprocess stdout
def StartProc(dir, parm):
global proc
proc_log = open(dir + os.sep + "MyLog.txt","w") #new path for each file
if parm:
proc = subprocess.Popen(path, 0, None, subprocess.PIPE, proc_log, None)
else:
MyReset(proc) #reset the process(proc) to its default values
proc.stdout = proc_log #no effect
print "fptr ", proc.stdout
#endif
#enddef
prm = True
for i in range(0, 5):
StartProc(i, prm)
prm = False
#endfor
Run Code Online (Sandbox Code Playgroud)
我想要做的只是启动一次可执行文件,但在每次迭代时我想将进程输出重定向到另一个文件.发生的事情是,文件是在不同的路径中创建的,但输出会重定向到第一次创建的文件.
注意:MyReset()在第一次迭代后将进程(可执行文件)初始化为其默认值.
以下行会将进程stdout更改为新文件吗?
proc.stdout = proc_log
Run Code Online (Sandbox Code Playgroud)
就像unwind说的那样,你不能改变子进程正在写入其输出的文件描述符.
您可以做的是,在python脚本中读取子进程的输出,然后将其写回到您想要的任何文件.例如:
proc = subprocess.Popen(path, 0, None, subprocess.PIPE, subprocess.PIPE, None)
for l in proc.stdout.readlines():
output_file.write(l)
Run Code Online (Sandbox Code Playgroud)
显而易见,您需要弄清楚控件应该如何在您的应用程序中运行,即您是否可以从主线程进行写入,主线程何时应该从StartProc()该情况返回,或者您是否必须从另一个线程进行写入这样主线程就可以StartProc()立即返回.