2017-07-30 31 views
1

我有一个使用subprocess.Popen启动子进程的python脚本。子进程然后启动一个外部命令(在我的情况下,它播放一个MP3)。 python脚本需要能够中断子进程,所以我使用了描述here的方法,该方法为子进程提供了自己的会话ID。不幸的是,当我现在关闭python脚本时,子进程将继续运行。Python,在脚本结束时使用不同的SID关闭子进程

如何确保从脚本启动的子进程,但是如果在python脚本停止时仍然会关闭不同的会话ID?

回答

0

TL; DR更改POPEN PARAMS:拆分了POPEN CMD(前"list -l" - >["list", "-l"]),并使用Shell=False

~~~

迄今为止所见过的最佳解决方案wa我只是不使用shell=True作为Popen的一个参数,因为我并不真的需要shell=True,所以我只是简单地使用它,因为Popen不会识别我的cmd字符串,而且我太懒惰也把它分成了一个参数列表。这给我带来了很多其他问题(例如,使用.terminate()变成同时使用外壳变得更复杂了,需要有它的会话ID,见here

只需从一个字符串分割CMD成参数列表让我使用Popen.terminate()而不必给它自己的会话ID,通过没有一个单独的会话ID进程将被关闭,当python脚本停止

0


Is there any way to kill a Thread in Python? ,并确保您使用它作为线程

import threading 
from subprocess import call 
def thread_second(): 
    call(["python", "secondscript.py"]) 
processThread = threading.Thread(target=thread_second) # <- note extra ',' 
processThread.start() 

print 'the file is run in the background' 
+0

我正在调查这一点,我不知道它是尽管在我的情况下是一个很好的解决方案,因为子进程是外部命令。从这篇文章中,python线程不太好处理中断,因此不处理好关闭外部命令 – Alter

+0

阅读此帖杀死线程 – 2017-07-30 21:17:41

+0

https://stackoverflow.com/questions/323972/is-there-any-way-to- kill-a-thread-in-python – 2017-07-30 21:17:52

相关问题