在我的测试运行器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,也没有运气。
答案 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))