启动不阻止父级重定向到的文件的子过程

时间:2019-04-15 14:35:16

标签: python windows cmd python-3.4

我正在尝试生成一个子进程,该子进程在主进程关闭后仍应运行。这部分工作正常,但是如果我将此过程的输出重定向到文件,由于该过程仍会阻止日志文件,因此无法再次启动脚本。

这个简短的例子演示了这个问题: 在这种情况下,第二个过程是“记事本”,并由“ other.cmd”启动。而主进程/脚本是“ test_it.py”,它由“ start_it.cmd”启动。

start_it.cmd

@python test_it.py > test.log

test_it.py

import subprocess
from subprocess import DEVNULL, STDOUT
subprocess.Popen(["other.cmd"], stdin=DEVNULL, stdout=DEVNULL, stderr=STDOUT)

other.cmd

start notepad

第二次执行start_it.cmd时,它将失败,并显示以下错误消息“该进程无法访问该文件,因为该文件正在被另一个进程使用。”

如何启动子进程,以使其不会阻止日志文件?

2 个答案:

答案 0 :(得分:1)

使用管道的解决方案。 multiplexer.py

with open('log.txt', 'a') as outputFile:
    while True:
        data = sys.stdin.read(1024)
        if None == data:
            break
        outputFile.write(data)

start_it.cmd

@python test_it.py | python multiplexer.py

其他所有内容保持不变。

答案 1 :(得分:0)

我找到了一个接近我最初意图的解决方案:

subprocess.Popen("explorer other.cmd", shell=True)

通过让资源管理器启动.cmd文件,这成功地将调用的.cmd与原始过程分离。因此无法保持日志文件打开。