我写了一个程序(myProg.py),它使用子进程模块通过run函数运行其他python程序。我注意到这些其他python程序中的arg in输入(arg)语句没有显示到控制台(stdout),而打印中的arg(args)显示正确。这只发生在我通过控制台运行我的程序时。当我通过LiClipse运行我的程序时,不会发生这种情况。
以下是复制这种情况的最简单方法:
使用python 3.6.2和windows 10
a=输入(“输入任何内容”)打印(“a有:“a)
如果你删除,stderr=子进程。PIPE您将看到正确的输出。
现在,保存步骤2中的代码
我的问题是:
输入
函数打印提示文本到stderr
,这是一个已知的问题
您重定向了stderr
,因此没有显示提示文本,当您从LiClipse运行时,stderr不会重定向。
您可以自行输出提示,如:
print("Enter anything", end='')
a = input()
或者,在输入之前导入readline模块,然后输入将使用GNU readline lib(如果有),将其打印到stdout。虽然在您的情况下,程序作为子进程运行,但您仍然可以实现以下目标:
python -c "import readline; import runpy; runpy.run_path('/path/to/program.py')"
问题内容: 我有一个UNIX本机可执行文件,它要求像这样输入参数 prog.exe <foo.txt。 foo.txt有两行:bar baz 我正在使用java.lang.ProcessBuilder来执行此命令。不幸的是,prog.exe仅能使用文件重定向功能。有什么办法可以模仿Java中的这种行为? 当然, 不起作用。 谢谢! 问题答案: 未经测试,但类似的东西应该起作用。
问题内容: 我正在尝试使用Tkinter GUI启动子进程并将其stdout / stderr输出显示到Text小部件。最初,我认为可以通过设置“ sys.stdout = text_widget”轻松将sys.stdout重定向到Text小部件,但似乎不行。出现错误:“文本实例没有属性’flush’”。 我在线检查并得到了一些解决方案,例如使用队列与子进程进行通信。但是,由于我的特殊要求,它们都
问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。
问题内容: 我在命令行中执行的操作: 我想用python做什么: 问题答案: 更新:不鼓励使用,尽管在Python 3中仍然可用。 用途 如果你确实要使用子流程,请使用以下解决方案(大部分内容来自子流程的文档): OTOH,你可以完全避免系统调用:
1. Shell 重定向 1.1 Shell 重定向是什么 我们在之前章节有学习 echo/printf 来将我们的需求输出,此时就是我们将系统的返回输出到我们标准终端,使得我们能够看到正常的输出的结果,Unix 命令默认的输入设备即 stdin 为键盘,标准和错误设备即 stdout 为显示器,我们利用重定向可以将输入改为文件,或者将输出重新定向到其他设备或文件中。 1.2 为什么要用重定向 我
本文向大家介绍linux shell数据重定向(输入重定向与输出重定向)详细分析,包括了linux shell数据重定向(输入重定向与输出重定向)详细分析的使用技巧和注意事项,需要的朋友参考一下 在了解重定向之前,我们先来看看linux 的文件描述符。 linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操