Python从子进程调用raw_input
我在下面的代码中使用 subprocess 来调用一个 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 个回答
2
如果我理解你的问题,你是想把当前的标准输入转发给一个子进程。可以这样做:
subprocess.Popen(file, stdin=sys.stdin, ...)
3
这里有一个例子,展示了子进程是如何接收我的输入的:
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()