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