我编写了一个程序(myProg.py),它使用子进程模块通过运行函数运行其他python程序。我注意到这些其他python程序中的输入(arg)语句中的arg没有显示到控制台(stdout),而print(args)中的args显示正确。这只发生在我通过控制台运行我的程序时。当我通过LiClipse运行我的程序时,不会发生这种情况。python subprocess.run with stderr = subprocess.PIPE重定向输入(文本)
这里是复制这种情况下,最简单的方法:
使用Python 3.6.2和Windows 10
- 创建一个Python程序包含以下两行并保存为someProgram.py:
a = input("Enter anything") print("a has: " + a)
- 开放CMD,类型:蟒
- 类型:进口子
- 类型:subprocess.run([ “蟒”, “path..to..someProgram.py”],标准错误= subprocess.PIPE)
- 否ouptut到目前为止,解释器正在等待输入......键入内容并按Enter键。
- 您将看到print语句的输出。
如果删除stderr = subprocess.PIPE,您将看到正确的输出。
现在,将步骤2 & 3中的代码保存到另一个文件中,在与someProgram.py相同的文件夹中将其命名为myProg.py。从LiClipse运行myProg.py。你会发现myProg.py运行正常,并产生正确的输出。
我的问题是:
- 为什么这个问题subprocess.run发生
- 我怎样才能解决这个问题
- 为什么会有通过命令行,并通过IDE运行的代码之间的差异。
感谢您指出错误报告。我正在使用Windows,所以我将不得不下载并使用pyreadline。您是否知道另一个与操作系统无关的解决方法? –
或者,您可以自己打印提示标准输出,更新。 – georgexsh
感谢georgexsh。不幸的是,这不符合我的要求。 –