Subprocess stdin input
本问题已经有最佳答案,请猛点这里访问。
我正试图将参数传递给我的test_script.py,但我得到了以下错误。我知道这不是最好的方法,但它是唯一一个可以工作的方法,因为我不知道test_script.py中有哪些函数。如何将参数作为stdin输入传递?
测试脚本
1 2 3 4 | a = int(input()) b = int(input()) print(a+b) |
主脚本
1 2 3 4 | try: subprocess.check_output(['python', 'test_script.py',"2","3"], stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: print(e.output) |
误差
1 2 3 4 5 6 7 8 9 | b'Traceback (most recent call last): File"test_script.py", line 1, in <module> a = int(input()) EOFError: EOF when reading a line ' |
如果不想使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from subprocess import Popen, PIPE, STDOUT p = Popen(['python', 'test_script.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT) p_stdout = p.communicate(input=b'1 2 ')[0] # python 2 # p_stdout = p.communicate(input='1 2 ')[0] print(p_stdout.decode('utf-8').strip()) # python2 # print(p_stdout) |
作为so python子进程和用户交互的参考。
更多关于https://pymotw.com/2/subprocess的信息/
这很简单,test_script.py需要的是键盘输入,而不是参数。
如果您想让main_script.py将参数传递给test_script.py,那么您必须修改下面的test_script.py代码,这样就可以了。
1 2 3 4 5 | import sys args = sys.argv[1:] for arg in args: print arg |
否则,可以检查argparse https://docs.python.org/2/library/argparse.html
不确定您要做什么,但这里有一个工作示例:
1 2 3 4 5 6 7 8 9 10 11 12 | import sys # print('Number of arguments:', len(sys.argv), 'arguments.') # print('Argument List:', str(sys.argv)) # print(sys.argv[1]) # print(sys.argv[2]) a = int(sys.argv[1]) b = int(sys.argv[2]) print(a+b) |
还有你的
1 2 3 4 5 6 7 8 9 | import subprocess try: out = subprocess.check_output(['python', 'test_script.py',"2","3"], stderr=subprocess.STDOUT) print(out) except subprocess.CalledProcessError as e: print(e.output) |