2016-08-01 26 views
1

我試圖在後臺運行一個Python腳本運行它發送命令,行書,聽命令。例如,如果我跑我的腳本:用標誌

python my_script.py將開始運行(並等待命令)。

然後我想運行:

python my_script.py --do_something,打開一個不同的Python程序,它會在之前的過程中運行的功能do_something()

我已經看到了這個作品像PDPlayer方案,其中--play使播放器的標誌,開始播放視頻。這也可以在python中完成嗎?

我知道如何使用argparse處理命令行參數。我需要關於兩個python進程之間的通信方面的幫助。

此外,我計劃cx_freeze應用程序,所以應用程序的PID可以使用psutil通過搜索可執行文件的名稱找到。

謝謝。

順便說一句,我使用的是Windows ...

+0

這是依賴於操作系統的。在POSIX機器上,您可以將其作爲響應信號的守護進程運行。在Windows上它將是一個服務等 –

回答

1

它可以,如果你保存原始腳本來完成某個地方的PID。 當你用一些標誌運行你的腳本時,你發送的信號應該由主腳本正確處理。 在這裏開始您的搜索https://docs.python.org/2/library/signal.html

+0

謝謝我認爲這就是我的意思。 btw,說我cx_freezed python應用程序,它現在是一個可執行文件。我可以通過其進程名稱檢索pid嗎? – Omer

+1

我從來沒有真正使用Windows,所以我不能確定。 在linux中,你可以通過簡單地運行'ps'來完成。您可以在啓動原始腳本時在某個文件中編寫pid,並在使用參數運行腳本時讀取它,這是肯定的 –

1

這需要做兩件事:您需要處理命令行標誌,並且需要將信號發送到另一個進程。對於標誌,你可以使用argparse庫,或者簡單地使用sys.argv。

用於發送信號,則需要在已經運行的進程的進程ID(PID)。在Linux下,您可以調用ps,並檢查是否有另一個腳本實例正在運行。如果有,請發送一個信號。

另一種替代的信號處理是的DBus。雖然這不是跨平臺的。