确定子进程是不是从标准输入读取

Posted

技术标签:

【中文标题】确定子进程是不是从标准输入读取【英文标题】:Determine if a subprocess reads from stdin确定子进程是否从标准输入读取 【发布时间】:2020-11-23 13:16:33 【问题描述】:

我有一个通过subprocess.run(...) 启动其他进程的python 脚本。通常这样的进程会自动运行,而无需从标准输入中读取。但是,在出现错误的情况下,进程会等待用户输入。我想从调用 python 脚本中检测到这种情况,然后例如杀死那个进程。我怎样才能做到这一点?

(我的想法是创建一个类似文件的对象,该对象在调用其.read() 方法时引发异常并将其传递给subprocess.Popen(...) 作为stdin kwarg 的“诱饵”。但这似乎有点丑陋,因为有些fileno 需要伪造。)

【问题讨论】:

不确定子流程模块是否可行。几天前我需要类似的东西并解决了pexpect 在那里你可以定义正则表达式/字符串基本上等待,当它出现时你可以根据需要处理它。 【参考方案1】:

你可以只传递一个空文件,例如subprocess.DEVNULL。等待标准输入的进程如果尝试从此类文件中读取,将收到 EOF 信号。

【讨论】:

以上是关于确定子进程是不是从标准输入读取的主要内容,如果未能解决你的问题,请参考以下文章

使用重定向的标准输入处理子进程中的 kbhit

Python:如何写入子进程的标准输入并实时读取其输出

如何写入 Python 子进程的标准输入?

如何防止孩子在 fork() 之后干扰父母的标准输入

ffmpeg:哪些文件格式支持标准输入?

C中的管道,用于读取标准输入的缓冲区