Python вызывает raw_input из подпроцесса - PullRequest
4 голосов
/ 17 января 2010

Я вызываю скрипт Python из нижеприведенного с использованием подпроцесса. Из командной строки пользователь выбирает, какой файл открыть, используя raw_input

import optparse
import subprocess
import readline
import os

def main():

    options = {'0': './option_0.py',
            '1': './option_1.py',
            '2': './option_2.py',
            '3': './option_3.py'}
    input = -1

    while True:
        if input in options:
            file = options[input]
            subprocess.Popen(file)
        else:
            print "Welcome"
            print "0. option_0"
            print "1. option_1"
            print "2. option_2"
            print "3. option_3"
            input = raw_input("Please make a selection: ")

if __name__ == '__main__':
    main()

Однако в вызываемом подпроцессе (скажем, вызывается option_1.py) у меня проблема с повторным использованием raw_input для получения приглашения от пользователя. Мне известны аргументы .PIPE, и я попытался

subprocess.Popen(file, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Но опять не повезло.

Ответы [ 2 ]

3 голосов
/ 17 января 2010

Вот пример, где подпроцесс получает мой ввод:

import subprocess
import sys

command = 'python -c \'print raw_input("Please make a selection: ")\''
sp = subprocess.Popen(command, shell = True, stdin = sys.stdin)
sp.wait()
2 голосов
/ 17 января 2010

Если я понимаю ваш вопрос, вы хотите перенаправить текущий стандартный ввод в подпроцесс. Что можно сделать следующим образом:

subprocess.Popen(file, stdin=sys.stdin, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...