【问题标题】:Python calling raw_input from a subprocessPython 从子进程调用 raw_input
【发布时间】:2025-12-08 12:45:01
【问题描述】:

我正在使用子进程从下面调用一个 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)

但还是没有运气。

【问题讨论】:

  • 我个人会让这个尽可能非交互式。

标签: python subprocess


【解决方案1】:

这是一个子流程接收我的输入的示例:

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】:

    如果我理解您的问题,您希望将当前标准输入重定向到子进程。可以通过这种方式完成:

    subprocess.Popen(file, stdin=sys.stdin, ...)
    

    【讨论】: