私は 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
正しく実行されますが、オブジェクトには何もしません