2014-10-22 52 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