2014-10-22 53 views
0

您好我正在使用subprocess.call("sudo bash /home/pi/Desktop/switchtest.sh", shell=True)来启动一个python脚本。 switchtest.sh的内容是sudo python /home/pi/Desktop/switch1.py。现在,使用相同的subprocess调用如何停止运行python脚本?或者有没有其他方法可以阻止这种情况?使用子进程调用停止bash脚本

+0

如何在不涉及python的情况下停止脚本? – 2014-10-22 02:57:58

+0

你为什么要调用'sudo'两次?一次就够了。 – tripleee 2014-10-22 03:12:36

+1

为什么你使用Python来运行一个shell来运行Bash来运行Python? – tripleee 2014-10-22 03:13:14

回答

0

subprocess.call是同步的,所以它将不会返回,直到您的脚本完成。你可以使用popen来实现异步:

p = subprocess.Popen("sudo bash /home/pi/Desktop/switchtest.sh", shell=True) 
# do something else, polling or waiting perhaps 
# now kill it 
p.terminate() 
+0

我想从我的主程序启动其他程序。所以,我调用subprocess从一个函数启动程序,并在我的主程序中的另一个函数中停止它。 – bobdxcool 2014-10-22 04:10:17

+0

@bobdxcool:通常,'p.terminate()'可能只会杀死直接的子进程,让孙子们继续运行。在这种情况下,请参阅[如何终止使用shell = True启动的python子进程](http://stackoverflow.com/q/4789837/4279)。 – jfs 2014-10-22 06:34:05

+0

作为一个额外的改进,你应该省略不必要和浪费的'shell = True'。 – tripleee 2014-10-22 08:02:55