
我在使用 python模組(在 python 腳本中)發送shutdown -h 0
到lxc
Debian 容器(即在 lxc 中執行此命令)時遇到問題。pexpect
在這個模組中,使用者可以「期望」(=等待進程輸出)某個子字串,其中包括 EOF,這讓我想到了一個問題,以便能夠進一步調試為什麼在輸出中無法識別 EOF。我需要知道進程終止後我可以「期望」什麼,以便等待進程結束。我不能簡單地等待該過程,因為該pexpect
模組為此隱藏了非阻塞函數。
該pexpect
模組(參見http://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect有關詳細資訊)將 read 系統呼叫中 EOF 的接收包裝在(duck)類型中,並使其可用於pexpect.expect
(進程的可能輸出/回饋的封裝)。
我一直想知道,因為像這樣的一些進程ls
預計會以 EOF 終止,即pexpect
EOF 的含義(例如http://pexpect.sourceforge.net/pexpect.html)。
答案1
shutdown -h 0
我建議執行此命令halt
,或從主機執行此命令,而不是執行此命令lxc-shutdown -n <name>
。
來源:9.5 監控和關閉容器
答案2
EOF 表示在可能提供無限量資料(例如流)的資源上預計不會有進一步的輸入。這種情況通常透過在流上寫入單一字元來表達(由底層系統(可能是作業系統或運行時環境)定義)。
當進程使用流進行進程間通訊時,它們需要指示其輸出的限制,並且發送進程需要使用 EOF 指示其輸入的限制。底層系統肯定會將此輸入和輸出轉發到自己的流程處理機制,使 EOF 可用於程式中/系統上的評估。
請注意pexpect
問題中的用例:shutil.pexpect
似乎不適合複製lxc
容器的檔案。它被卡住了,輸出的時間偏移pexpect
導致了混亂。