Python 子进程标准输入

Python 子进程标准输入,python,subprocess,stdin,Python,Subprocess,Stdin,我试图将参数传递给test_script.py,但出现以下错误。我知道这不是最好的方法,但这是唯一可行的方法,因为我不知道test_script.py中有哪些函数。如何将参数作为标准输入传递 测试脚本.py a = int(input()) b = int(input()) print(a+b) try: subprocess.check_output(['python', 'test_script.py', "2", "3"], stderr=subprocess.STDOUT) ex

我试图将参数传递给test_script.py,但出现以下错误。我知道这不是最好的方法,但这是唯一可行的方法,因为我不知道test_script.py中有哪些函数。如何将参数作为标准输入传递

测试脚本.py

a = int(input())
b = int(input())

print(a+b)
try:
  subprocess.check_output(['python', 'test_script.py', "2", "3"], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
  print(e.output)
main_script.py

a = int(input())
b = int(input())

print(a+b)
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'
b'Traceback(最近一次调用):\r\n文件“test\u script.py”,第1行,在\r\n a=int(input())\r\n读取一行时执行EOF\r\n'

不确定您想做什么,但这里有一个工作示例:

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)
和您的
主脚本.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)

这很管用,test_script.py需要键盘输入,而不是参数

如果您希望main_script.py将参数传递给test_script.py,则必须修改test_script.py下面的代码

import sys

args = sys.argv[1:]
for arg in args:
    print arg

<> P> >如果您不想使用<代码> ARGV ,但您可以在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)
作为SO的参考


关于

的更多信息,在
main_script
中,您将数字作为参数传递,但在
test_script
中,您试图从
stdin中读取它们
是的,我知道,但我不知道如何修复它。您实际上在尝试做什么?一个测试其他脚本的脚本,您键入输入数据并读取输出,如果您知道正确的输出,您可以查看脚本是否正常工作dupe涵盖了您需要的几乎所有内容此功能正常,但它使用了
sys.argv
,是否有任何方法可用于
input()
,或将
input()
更改为
sys.argv
我收到错误:
p\u stdout=p.communicate(input='1\n2\n')[0]文件“C:\Python34\lib\subprocess.py”,第959行,在communicate-stdout中,stderr=self.\u-communicate(输入,结束时间,超时)文件“C:\Python34\lib\subprocess.py”,第1195行,在-communicate-self.stdin.write(输入)TypeError中:“str”不支持缓冲区接口
编辑为与python3兼容