Python子进程,为子进程提供输入

Python子进程,为子进程提供输入,python,ubuntu,subprocess,Python,Ubuntu,Subprocess,我制作了一个程序来检查一个密钥。还有另一个程序应该能找到密钥。我设法在第二个程序中打开了一个子进程,但无法向它发送输入。下面是检查密钥的程序,secret\u key.py: 这就是我被卡住的地方,find_key.py: import subprocess program = subprocess.Popen("./program.sh") 现在我找不到方法发送它要求的输入 我是否可以从find\u key.py向secret\u key.py发送字符串输入?要向通过Popen打开的进程

我制作了一个程序来检查一个密钥。还有另一个程序应该能找到密钥。我设法在第二个程序中打开了一个子进程,但无法向它发送输入。下面是检查密钥的程序,
secret\u key.py

这就是我被卡住的地方,
find_key.py

import subprocess

program = subprocess.Popen("./program.sh")
现在我找不到方法发送它要求的输入


我是否可以从
find\u key.py
secret\u key.py
发送字符串输入?

要向通过Popen打开的进程发送输入并从中读取输出,可以使用进程“
stdin
stdout
字段对进程进行读取和写入。您确实需要告诉Popen设置管道,不过:

process = subprocess.Popen([SPIM_BIN] + extra_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
pin = process.stdin
pout = process.stdout
现在,您可以像使用任何旧的文件描述符一样,向
pin
写入数据,并从
pout
读取数据


请注意,这可能不允许您连接到
gnome终端
。但它将允许您连接到
program.sh

我正在编写进程.stdout.write('hi'),但它收到了一个错误:“IOError:文件未打开进行写入”我的错误,我错误地列出了
pin
pout
。写入
pin
(子进程的stdin)并读取
pout
(子进程的输出)。修正在上面。谢谢,现在我可以发送输入。虽然我不太懂如何使用
撅嘴
,你能解释一下吗?另外,如何发送多个输入?例如,如果我有一个程序要求
a
b
a=raw\u input()
b=raw\u input()
?pin和pout是文件描述符,所以你可以调用pin上的write方法来发送更多的输入。使用pout:pout.read()进行pin.write(“更多输入”),您还可以在进程上调用communicate方法,发送输入并接收输出,甚至错误。请看:@RaydelMiranda看看我上面写的代码。在我给它第一次输入后,
pin.write('hi')
-正确的键,它会要求我现在按ENTER键关闭程序。所以我给它第二个输入,
pin.write('ok')
,它应该退出并关闭子进程,但它给了我这个错误:`Traceback(最近一次调用):File”/home/user/Desktop/shcool/secret\u key.py',第24行,在原始\u输入中(“按ENTER退出\n”)EOFError:EOF读取文件对象析构函数中的行关闭失败:sys.excepthook丢失sys.stderr'为什么需要在gnome终端中运行program.sh?我的错,不需要它。删除并编辑了以上内容。我只是用解释器试了一下,没有新的终端,它就搞砸了,但当我从
find_key.py
运行它时,我不需要它。
import subprocess

program = subprocess.Popen("./program.sh")
process = subprocess.Popen([SPIM_BIN] + extra_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
pin = process.stdin
pout = process.stdout