
shutdown -h 0
Python モジュール (Python スクリプト内) を使用して Debian コンテナに送信するlxc
(つまり、lxc でこのコマンドを実行する)pexpect
ときに問題が発生しています。このモジュールでは、ユーザーは特定のサブ文字列 (EOF など) を「期待」(= プロセス出力を待機) できますが、出力で EOF が認識されない理由をさらにデバッグできるようにするために、この質問が発生します。プロセスの終了を待機するには、プロセスの終了後に何を「期待」できるかを知る必要があります。モジュールはpexpect
そのためのための非ブロッキング関数を隠しているため、単純にプロセスを待機することはできません。
モジュールpexpect
(http://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect詳細については、read システム コールでの EOF の受信を (duck)type でラップし、pexpect.expect
(プロセスの可能な出力/フィードバックのカプセル化) で使用できるようにします。
私は、いくつかのプロセスがls
EOFで終了することが期待されているので、つまりpexpect
EOFの意味(例)が翻訳元:)。
答え1
このコマンドを実行する代わりに、 を実行するか、ホストからこのコマンドを実行することshutdown -h 0
をお勧めします。halt
lxc-shutdown -n <name>
答え2
EOF は、無限量のデータを提供する可能性のあるリソース (例: ストリーム) に、これ以上の入力が期待されないことを示します。この状況は、ストリーム (基盤となるシステム (OS またはランタイム環境など) によって定義されます) に 1 文字を書き込むことによって表現されることがよくあります。
プロセスはプロセス間通信にストリームを使用するため、出力の制限を示す必要があり、送信プロセスは EOF を使用して入力の制限を示す必要があります。基盤となるシステムは、この入力と出力を独自のプロセス処理メカニズムに転送し、EOF をプログラム内またはシステム上で評価できるようにします。
pexpect
質問の使用例に関する注意: コンテナshutil.pexpect
のファイルをコピーするには適していないようですlxc
。スタックしてしまい、出力の時間オフセットによってpexpect
混乱が生じます。