私は 2 つの定義済み関数を持ってfooいます。barこれらの関数pexpectは、コマンド ラインからスクリプトを呼び出しますpexpect.spawn。次に、pexpect を使用して control-c を送信し、sendcontrol実行close中のスクリプトにシャットダウンを指示し、オブジェクトを終了します。プログラムが実行された後、オブジェクトはまだメモリ内で実行されており、control-c のように見えたり、child.close到達していないように見えますfoo()
スクリプトはスポーンされたオブジェクトを終了する必要がありますが、代わりに私のifロジックはでbar(child)作成されたオブジェクトに影響を与えないようですfoo()
コードは次のとおりです。
def foo():
child = pexpect.spawn ('./script.sh')
return child
def bar(child):
if child.isalive():
child.sendcontrol('c')
child.close()
if child.isalive():
print 'Child did not exit gracefully.'
else:
print 'Child exited gracefully.'
a = foo()
bar(a)
プログラムは常に「子が正常に終了しました」と出力して終了しますが、script.sh実行はバックグラウンドのままになります
このコードはここで機能します:
def bar(child):
child.sendcontrol('c')
で作成されたオブジェクトと正常にやり取りしますfoo()が、何らかの理由で、ifロジックを使用した他のコードはif正しく実行されますが、オブジェクトには何もしません