1

我在 Python 中有简化的以下代码:

proc_args = "gzip --force file; echo this_still_prints > out"
post_proc = subprocess.Popen(proc_args, shell=True)

while True:
    time.sleep(1)

假设文件足够大,需要几秒钟的时间来处理。如果我在 gzip 仍在运行时关闭 Python 进程,它将导致 gzip 结束,但它仍会执行以下行到 gzip。我想知道为什么会发生这种情况,如果有办法让我不再继续执行以下命令。

谢谢!

4

3 回答 3

2

退出的进程不会自动导致其所有子进程被杀死。有关此问题的大量讨论,请参阅此问题及其相关问题。

gzip 退出是因为包含其标准输入的管道在父级退出时关闭;它读取 EOF 并退出。但是,运行这两个命令的 shell 没有从标准输入读取,所以它没有注意到这一点。所以它只是继续并执行echo命令(也不会读取标准输入)。

于 2012-10-02T00:14:37.883 回答
0

post_proc.kill() 我相信这就是您要寻找的东西...但是您必须明确称呼它

见:http ://docs.python.org/library/subprocess.html#subprocess.Popen.kill

于 2012-10-01T23:38:23.003 回答
0

try-finally在这种情况下使用(不幸的是,您不能with像在 中那样使用file.open()):

proc_args = "gzip --force file; echo this_still_prints > out"
post_proc = subprocess.Popen(proc_args, shell=True)

try:
    while True:
        time.sleep(1)
finally:
    post_proc.kill()
于 2019-01-25T16:53:29.810 回答