簡體   English   中英

如何從shell啟動和停止Python腳本

[英]How can I start and stop a Python script from shell

謝謝你的幫助!

我想從shell腳本啟動和停止Python腳本。 開始工作正常,但我想在10秒后停止/終止Python腳本。 (這是一個不斷計數的計數器)。 芽是不會停止....我認為它掛在第一行。

什么是開始等待10秒的正確方法?

Shell腳本:

python /home/pi/count1.py

sleep 10

kill /home/pi/count1.py

它還沒有工作。 我明白在后台編寫腳本。 那工作! 但在做完后,我從樹莓樹上得到另一條評論:

python /home/pi/count1.py & 

sleep 10; kill /home/pi/count1.py

/home/pi/sebastiaan.sh:line 19:kill:/home/pi/count1.py:參數必須是進程或作業ID

它必須在:(但是什么?感謝您的幫助!)

sleep 10; kill /home/pi/count1.py

你是對的,shell腳本在第一行“掛起”,直到python腳本完成。 如果沒有,則shell腳本將不會繼續。 因此,您必須在shell命令的末尾使用&在后台運行它。 這樣,python腳本啟動,shell腳本繼續。

kill命令不帶路徑,它需要一個進程id。 畢竟,您可能會多次運行相同的程序,然后嘗試殺死第一個或最后一個。

bash shell支持$! 變量,這是最后一個后台進程的pid。

您當前的示例腳本是錯誤的,因為它不會並行運行python作業和睡眠作業。 沒有裝飾,腳本將等待python作業完成,然后睡10秒,然后殺死。

你可能想要的是:

python myscript.py &     # <-- Note '&' to run in background

LASTPID=$!               # Save $! in case you do other background-y stuff

sleep 10; kill $LASTPID  # Sleep then kill to set timeout.

如果操作系統允許,您可以終止任何其他進程。 即如果它不是屬於操作系統本身的一些關鍵過程。

命令kill使用PID來終止進程,而不是進程的名稱或命令。

使用pkill。

您也可以發送一個不同的信號,而不是SIGTERM(請求終止程序),您可能希望在Python應用程序中檢測並響應它。

例如,您可能希望檢查進程是否處於活動狀態並從中獲取一些數據。

為此,請選擇一個用戶自定義信號,並使用信號模塊在Python程序中注冊它們。

要查看腳本掛起的原因,請參閱Austin的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM