3

タスクを 1 つずつ実行するように設計された大きなスクリプトがあります。しかし、start-stop-daemon を使用していつでもスクリプトを強制終了する init スクリプトがあります。スクリプトは正常に終了しますが、subprocess コマンドは終了するまで実行されます。グローバル変数をどのように処理しようとしているかに問題があるのではないかと思います。または、サブプロセスと .communicate を使用しています。とにかく、コードから関連するものは次のとおりです。

import subprocess
import os
import signal

pro = ''

def sigHandler( signum, frame ):
    global pro
    os.killpg( pro.pid, signal.SIGTERM )
    sys.exit()

def run(data):
    #I found an example using preexec_fn somewhere on stackoverflow. Cant
    #remember if they were using .communicate() or not
    global pro
    pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid ).communicate()
    return( 1 )

if __name__ == '__main__':
    signal.signal( signal.SIGTERM, sigHandler )
    while True:
        run( relevantData )
4

1 に答える 1

0

友人は私がそれを理解するのを助けました。私のコメントで述べたように、コマンドの実行時に pro が読み込まれませんでした。したがって、コードを次のように変更する必要がありました。

pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid )
pro.communicate()

そして、それはうまくいきました:)

于 2012-12-04T20:07:25.443 に答える