python - 如何自动将相同的答案传递给 subprocess.Popen ?

标签 python subprocess

我想称呼类似yes "y"| foo bar,但使用subprocess.Popen。目前我使用这个:

yes = subprocess.Popen(['yes', '""'], stdout=subprocess.PIPE)
proc = subprocess.Popen(['foo', 'bar'], stdin=yes.stdout, stdout=subprocess.PIPE)

但是,当然,这在 Windows 上不起作用。我怎样才能做到这一点,以便它适用于每个平台?

最佳答案

p = subprocess.Popen(['/bin/cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE )
p.stdin.write("yes\nyes\nyes")

In [18]: p.communicate()
Out[18]: ('yes\nyes\nyes', None)

当然,您可以在两个线程中执行此操作(在一个线程中写入,在另一个线程中读取 Popen 实例)。

但是,这并不真正安全:

Can someone explain pipe buffer deadlock?

关于python - 如何自动将相同的答案传递给 subprocess.Popen ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35080207/

相关文章:

python - 编写一个返回反转数字的函数

python - 多次尝试后无法访问推特

仅当从上下文菜单调用时,Python 脚本才会在 subprocess.run() 调用上执行失败

python - 使用 subprocess.check_call() 运行 shell 命令时出错

python - 在 Windows 操作系统上使用 Python 在 Chrome 或 Firefox 中打开一个新的未聚焦选项卡

python - 对于 subprocess.stderr=STDOUT - stdout=PIPE 比 stdout ="a_file_name"更好吗?

python - 检查子进程是否仍在运行,同时逐行读取其输出

python - 做多个 or 的 pythonic 方法是什么?

python - Pytest 标记 : mark entire directory/package

python - 遍历不终止的批处理脚本