我在使用 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
导致了混乱。