python - 与子流程交互

标签 python multithreading subprocess

我正在尝试自动运行一个名为 selftest.exe 的程序,该程序完成后会要求用户按 [ENTER] 退出。因此,通过 subprocess.Popen 调用此进程不起作用,因为它会永远挂起,直到用户按下 [ENTER],而用户永远不会按下 [ENTER]

虽然我认为不可能在正确的时间发送击键,但我考虑了超时,例如“XXX秒后,发送“\n”并将进程的标准输出存储在一个字符串”,XXX足够大,足以让我获得所有结果。

这是一个可行的想法,还是有一个“更干净”的想法可以与一般的交互式程序一起使用?

解决方案:第一个答案是正确的,只要按回车键,程序就会退出。但是,调用 p.communicate(input='\n') 将导致以下错误:'str' 不支持缓冲区接口(interface)。它需要改为 p.communicate(input=b'\n')

最佳答案

也许这是一个愚蠢的问题,并且您可能已经这样做了,但是您确定简单地将“\n”发送到进程不会起作用吗?我想说的是,selftest.exe 在完成之前可能不会真正读取 [ENTER]。当然,这取决于程序如何读取输入。您也可以尝试发送 SIGQUITSIGTERM,因此也许程序会妥善处理它们。

关于python - 与子流程交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26847130/

相关文章:

c++ - 尝试创建一个线程来向套接字发送消息。出现 2 个与线程构造函数有关的错误

python - 如何在 python 中将 EOF 写入 STDIN popen

python - 为什么对于非常大的数字,除法会变得更快

python - Python 和 Node.js 的不同 WPI v3 结果

java - 如何向 Runnable 类添加断点

python - Windows 上的 Bigquery 命令行工具

python - 在 Python 中产生不确定的守护进程

python - 保护 google app engine 数据存储区中的数据

python - 在 Python 中上移一个目录

c++ - 如何估计线程上下文切换开销?