2015-10-07 32 views
0

我正在製作一個Python程序(稱爲A),當程序收到終止信號時,它啓動一個不同的Python程序來運行(稱爲B)。當A程序關閉時,B程序仍然需要在後臺運行。在Python中,我如何在新的Python進程中產生原始關機

這是我爲A編寫的程序中的清理函數的一部分。此外,我無法對B做任何更改。(B是別人的項目,不允許更改它只是構建頂部)

我一直在尋找使用Popen或os.spawn函數,當它收到SIGTERM或SIGINT信號,但得到錯誤。 當我嘗試os.spawn時,它給了我一個錯誤,說它找不到文件名'B.py programArgs',它認爲progarmArgs是文件名的一部分。

任何想法我可以做什麼。

代碼是這樣的:

def main(): 
    signal.signal(signal.SIGINT, onExit) 
    signal.signal(signal.SIGTERM, onExit) 

def onExit(sig, frame): 
    pid = os.spawnl(os.P_NOWAIT, "usr/bin/python3", "python3", "/home/pi/filename", " programArg") 

然後,它給我的錯誤:

Python3: can't open file '/home/pi/filename progarmArg': [Errno 2] No such file or directory 
+0

您可以發佈你到目前爲止有什麼? – SirParselot

回答

1

假設我絕不錯過任何這應該工作

import subprocess 

p1 = subprocess.Popen(['python','B location'], stdout=None) 
+0

它的工作,但我現在得到它運行程序在根目錄,而不是作爲pi用戶,因爲python腳本需要以root運行。去看看我能否解決這個問題。 – needoriginalname

+0

我不明白。你只是說它在root下運行程序,並且它需要在root下運行。有什麼問題? – SirParselot

+0

這是一個單獨的問題。該程序需要作爲監視器的一部分作爲網絡嗅探器運行在根用戶上。這就是它運行root的原因。 – needoriginalname

相關問題