我试图将参数传递给我的test_script.py但是我收到了以下错误。我知道这不是最好的方法,但它是唯一可行的,因为我不知道test_script.py中有哪些函数。如何将参数作为stdin输入传递?
test_script.py
a = int(input())
b = int(input())
print(a+b)
main_script.py
try:
subprocess.check_output(['python', 'test_script.py', "2", "3"], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
print(e.output)
错误
b'Traceback (most recent call last):\r\n File "test_script.py", line 1, in <module>\r\n a = int(input())\r\nEOFError: EOF when reading a line\r\n'
答案 0 :(得分:1)
如果不想使用argv
,但是很奇怪,请考虑Popen并在stdin / stdout上进行操作/通信
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\n2\n')[0]
# python 2
# p_stdout = p.communicate(input='1\n2\n')[0]
print(p_stdout.decode('utf-8').strip())
# python2
# print(p_stdout)
的更多信息
答案 1 :(得分:-1)
不确定你想做什么,但这是一个有效的例子:
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)
您的main_script.py
:
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)
答案 2 :(得分:-1)
这就是jot开始工作, test_script.py 期望键盘输入而不是参数。
如果您希望 main_script.py 将参数传递给 test_script.py ,则必须修改 test_script.py 以下代码才能执行此操作
import sys
args = sys.argv[1:]
for arg in args:
print arg
否则你可以chek argparse https://docs.python.org/2/library/argparse.html