2013-11-26 153 views
0

我做了一个程序,检查一个密钥。和另一个应该找到秘密密钥的程序。我设法在第二个程序中打开一个子进程,但无法发送输入。下面是检查密钥的程序,secret_key.pyPython子进程,给子进程输入

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中把它要求。

是否有反正我可以从find_key.py发送一个字符串输入到secret_key.py

+0

为什么你需要在gnome终端中运行program.sh? – creichen

+0

我的不好,不需要它。删除并在上面编辑。我只是使用解释器来尝试它,并没有一个新的终端搞砸了,但是当我从'find_key.py'运行它时,我不需要它。 – Zipzap

回答

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

+0

我正在写process.stdout.write('嗨'),但它即时得到一个错误:“IOError:文件未打开写入” – Zipzap

+0

我的坏,我列出'pin'和'pout'不正确。你写'pin'(子进程'stdin)并从'pout'(子进程输出)读取。在上面修复。 – creichen

+0

谢谢,现在我可以发送输入。虽然我不太明白如何使用'pout',你能解释一下吗?另外我怎样才能发送超过1个输入?例如,如果我有一个程序,要求'a'和'b':'a = raw_input()'和'b = raw_input()'? – Zipzap