我呼籲myMain.py
與遞增的數字自動執行另一個Python程序這個簡單的Python腳本,我運行它在CentOS 7:Python腳本無法通過按Ctrl + C或Ctrl終止+ BREAK
#!/usr/bin/python
import os
import sys
import time
def main():
step_indicator = ""
arrow = ">"
step = 2
try:
for i in range(0,360, step):
step_percentage = float(i)/360.0 * 100
if i % 10 == 0:
step_indicator += "="
os.system("python myParsePDB.py -i BP1.pdb -c 1 -s %s" % step)
print("step_percentage%s%s%.2f" % (step_indicator,arrow,step_percentage)+"%")
except KeyboardInterrupt:
print("Stop me!")
sys.exit(0)
if __name__ == "__main__":
main()
現在我只知道這個腳本是單線程安全的,但我不能用Ctrl+C
鍵盤中斷來終止它。
我看過一些相關的問題:如Cannot kill Python script with Ctrl-C和Stopping python using ctrl+c我意識到,Ctrl+Z
不殺的過程中,它只是暫停過程,讓過程在後臺。 Ctrl+Break
也適用於我的情況,我認爲它只會終止我的主線程,但會保留子進程。
我也注意到,調用os.system()
會從當前執行過程產生一個子進程。同時,我也有os
文件I/O功能,os.system("rm -rf legacy/*")
將在myParsePDB.py
中調用,這意味着這個子進程也會產生子進程。那麼,如果我想趕上Ctrl+C
myMain.py
,我應該守護只有myMain.py
或者我應該守護每個進程時,他們產卵?
是否有必要在子進程運行'myParsePDB'?難道你不能把它寫成一個普通的模塊,你可以使用這個腳本調用而不是使用'os.system'函數嗎?你應該可以用''shutil.rmtree''來執行'rm'功能(https://docs.python.org/3/library/shutil.html#shutil.rmtree) –
@ TadhgMcDonald-Jensen有必要運行'myParsePDB'。 'rm'只是'myParsePDB'中的一小部分。 –