subprocess拥有用于redirect其父进程的标准输出的文件

情景我有一个batch filea.bat,其中包含语句

A.exe >> a.txt Test.exe >> a.txt 

A.exe启动另一个exe说b.exe(通过_wpopen函数)并返回。 但redirectA.exe的输出后,a.txt的所有权似乎被转移到b.exe。 由于b.exe仍在运行,仍然拥有a.txt,因此test.exe无法将其stdoutredirect到a.txt。

B.exe无限期运行,不能等待它停止。 而且我也无法将输出redirect到多个文件。 由于这些exe执行是安装设置的一部分,因此日志应该是连续的,并且必须对单个文件执行

有这种情况下有任何可能的解决scheme? 我想在a.exe返回后文件a.text是免费的!

Solutions Collecting From Web of "subprocess拥有用于redirect其父进程的标准输出的文件"

通过分别在每一行上放置重定向,您需要命令处理器重新打开该文件。 如果另一个进程仍然具有打开的文件的原始句柄,就像在您的方案中一样,这将不起作用。

相反,重定向一次输出多个命令,或整个批处理文件。 你可以使用call命令来做到这一点:

 call :main >> a.txt goto :eof :main A.exe Test.exe goto :eof 

你也可以使用括号:

 ( A.exe Test.exe ) > test.txt 

或者,如果你只想要一些输出到文件:

 call :main 3>> a.txt goto :eof :main A.exe >&3 Test.exe >&3 goto :eof 

请记住,直到B.exe退出,日志文件将保持打开,所以写入它的唯一方法是使用一个已经存在的句柄。 (这个假设你不能修改A.exe;如果可以的话,这可能是一个更好的解决方案。)

也可以像这样完全避免这个问题:

 A.exe > temp.txt type temp.txt >> a.txt