如何从 subprocess.Popen 使用 STDIN [重复]

Posted

技术标签:

【中文标题】如何从 subprocess.Popen 使用 STDIN [重复]【英文标题】:How to use STDIN from subprocess.Popen [duplicate] 【发布时间】:2016-09-29 16:35:04 【问题描述】:

我怎样才能实现类似的东西

$ echo "hello" | my_app

使用 Python 的子进程?

subprocess.Popen() 需要 STDIN 的管道或文件句柄。但我想通过变量为被调用程序提供标准输入。所以像

myinput = "hello"
subprocess.Popen("an_external_programm", stdin=myinput)
….

【问题讨论】:

看看Popen.communicate()。链接:docs.python.org/3/library/… 你能说清楚你的用例吗?首先,您看起来像是在向脚本传递“hello”,在第二个示例中,它是脚本中的一个变量。 我想从我的 Python 脚本中调用一个外部工具,类似于 shell 示例,但内容——来自 shell sxample 的“hello”来自一个 Python 变量。 实际上 Popen.communicate() 成功了 【参考方案1】:

在名为 myscript.py 的 python 脚本中

import sys

for line in sys.stdin:
     print(line)

在 unix 中

echo '你好' |我的脚本.py

【讨论】:

【参考方案2】:

我能够通过使用Popen.communicate()解决我的问题

所以某种伪代码:

proc = subprocess.Popen(…)
proc.communicate(input="my_input_via_stdin")

【讨论】:

省略号字符 (...) 掩盖了此答案中的解决方案 :-)

以上是关于如何从 subprocess.Popen 使用 STDIN [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python如何从迭代中获取与subprocess.Popen一起运行的变量输入

如何从 subprocess.Popen() 获取输出。 proc.stdout.readline() 块,没有数据打印出来

从 subprocess.Popen 调用“源”命令

subprocess.call和subprocess.Popen

如何在 Python 2 中将字符串传递给 subprocess.Popen? [复制]

从 subprocess.Popen 将参数传递给 argparse