我编写了一个程序(myProg.py),它使用 subprocess 模块通过 run 函数运行其他 python 程序。我注意到这些其他 python 程序中的 input(arg) 语句中的 arg 没有显示到控制台(stdout),而 print(args) 中的 args 显示正确。这只发生在我通过控制台运行我的程序时。当我通过 LiClipse 运行我的程序时,这不会发生。
这是复制这种情况的最简单方法:
使用 python 3.6.2 和 windows 10
- 创建一个包含以下两行的 python 程序并将其保存为 someProgram.py:
a = input("Enter anything")
print("a has: " + a)
- 打开cmd,输入:python
- 类型:导入子流程
- 类型:subprocess.run(["python", "path..to..someProgram.py"], stderr=subprocess.PIPE)
- 到目前为止没有输出,但解释器正在等待输入...输入一些内容并按 Enter。
- 您将看到 print 语句的输出。
如果您删除 , stderr=subprocess.PIPE 您将看到正确的输出。
现在,将步骤 2 和 3 中的代码保存在另一个文件中,在与 someProgram.py 相同的文件夹中将其命名为 myProg.py。从 LiClipse 运行 myProg.py。您会发现 myProg.py 运行良好并产生正确的输出。
我的问题是:
- 为什么 subprocess.run 会出现这个问题
- 我该如何解决
- 为什么通过命令行和通过 IDE 运行代码会有所不同。