我编写了一个程序(myProg.py),它使用子进程模块通过run函数运行其他python程序。我注意到这些其他python程序中的输入(arg)语句中的arg没有显示到控制台(stdout),而print(args)中的args正确显示。这只有在我通过控制台运行程序时才会发生。当我通过LiClipse运行我的程序时,这不会发生。
这是复制这种情况的最简单方法:
使用python 3.6.2和windows 10
a = input("Enter anything")
print("a has: " + a)
如果删除,stderr = subprocess.PIPE您将看到正确的输出。
现在,保存第2步和第2步的代码。 3在另一个文件中,在someProgram.py所在的文件夹中将其命名为myProg.py。从LiClipse运行myProg.py。你会发现myProg.py运行正常并产生正确的输出。
我的问题是:
答案 0 :(得分:1)
input
功能打印prompt text to stderr
,这是known issue
您重定向stderr
,因此当您从LiClipse运行时,提示文本未显示,stderr未被重定向。
你可以自己输出提示,例如:
print("Enter anything", end='')
a = input()
或者,在import readline
之前input
模块,然后input
将使用GNU readline
lib(如果有),它将打印到stdout。在您的情况下,程序作为子进程运行,您仍然可以实现此目的:
python -c "import readline; import runpy; runpy.run_path('/path/to/program.py')"