你如何从Python中读取subprocess.check_output()的输入?

时间:2018-01-19 18:49:39

标签: python

在我的测试运行器run_tests.py(不想修改)

output = subprocess.check_output("python main.py", universal_newlines=True, input="foo bar baz").strip()

在我的main.py

import sys
import json

print(json.dumps(sys.argv)) # I only get ['main.py']

如何从传递给子流程的输入中检索“foo bar baz”?我试过检查sys.stdin,也没有运气。

2 个答案:

答案 0 :(得分:0)

要传递可以从sys.argv访问的值,它们需要位于命令行中。 input参数成为程序的标准输入。

output = subprocess.check_output(["python", "main.py", "foo", "bar", "baz"], universal_newlines=True).strip()

答案 1 :(得分:0)

您当前正在传递“foo bar baz”作为run_tests.py中的输入,然后从main.py中打印命令行参数。无论是作为输入传递还是作为命令行参数都可以工作,但您需要选择一个。假设您打算传递用空格分隔的字母数字值,或者两者都可以正常工作,但如果您传递的东西比json更复杂,那么将它作为文本输入传递可能更有意义。这意味着您不需要更改run_tests.py。

要将文本作为输入传递,请在main.py中尝试:

import sys
import json

print(json.dumps(sys.stdin))

编辑:

我刚刚意识到你正在使用json方法将对象转储到字符串(我把它与json.loads混淆了)。现在我注意到了,你想做的事情毫无意义。您应该尝试解释您尝试完成的任务(或者如果您打算将字符串转换回main.py中的json,则使用加载)。

print(json.loads(sys.stdin))