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

时间:2013-11-26 07:14:48

标签: python ubuntu subprocess

我制作了一个检查密钥的程序。和另一个应该找到密钥的程序。我设法在第二个程序中打开子进程但无法向其发送输入。这是检查密钥secret_key.py的程序:

SECRET_KEY = "hi"
current_key = 0

while not current_key == "exit":
    wrong_key = False
    current_key = raw_input("Enter the key or enter 'exit' to exit.\n")

    for i in range(len(current_key)):
        if i < len(SECRET_KEY):
            if not current_key[i] == SECRET_KEY[i]:
                wrong_key = True
        else:
            wrong_key = True

    if not wrong_key:
        print("the key is right!\n")
        current_key = "exit"

raw_input("Press ENTER to exit\n")
exit()

现在我创建了一个.sh文件,以便能够在新终端中将其作为子进程运行program.sh

#! /bin/bash

python Desktop/school/secret_key.py

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

import subprocess

program = subprocess.Popen("./program.sh")

现在我找不到一种方法来发送secret_key.py它要求的输入。

无论如何我可以从secret_key.pyfind_key.py发送字符串输入吗?

1 个答案:

答案 0 :(得分:1)

要向Popen打开的流程发送输入和读取输出,您可以使用流程“stdinstdout字段读取和写入流程。但是,您需要告诉Popen设置管道:

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

现在你可以写pin并像pout那样读取任何旧的文件描述符。

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