您拥有的第二个解决方案很棒。获得所需的行为(获取ping
“结论”)只有一个问题:您向流程发送了错误的信号。
从外壳终止进程时,通常会发送SIGINT
信号。请参阅“ bash-Ctrl-C如何终止子进程?”。这允许进程“结束”(例如,清除临时文件,提供调试信息)。
import signal
# Open process
child.send_signal(signal.SIGINT)
# Provide some time for the process to complete
time.sleep(1)
# Echo output
Popen.terminate
(您现在正在使用的)发送SIGTERM
而不是SIGINT
。