我在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。我想知道为什么会发生这种情况,如果有办法,我可以让它继续执行以下命令。
谢谢!
答案 0 :(得分:2)
退出进程不会自动导致其所有子进程被终止。有关此问题的详细讨论,请参阅this question及其相关问题。
gzip退出,因为包含其标准输入的管道在父项退出时关闭;它读取EOF并退出。但是,运行这两个命令的shell不是从stdin读取的,所以它没有注意到这一点。所以它继续执行echo
命令(也不读取标准输入)。
答案 1 :(得分:0)
post_proc.kill()
我相信你正在寻找......但是你必须明确地称之为
请参阅:http://docs.python.org/library/subprocess.html#subprocess.Popen.kill
答案 2 :(得分: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()