可以在pythoncli脚本中组合管道输入和TTY提示吗?E、 g.,运行这个:
import sys
piped_text = None
if not sys.stdin.isatty():
piped_text = sys.stdin.read()
user_in = raw_input('Enter something: ')
if piped_text:
sys.stdout.write(piped_text)
sys.stdout.write(user_in + '\n')
生成以下输出:
^{pr2}$当我要寻找的输出是:
~: python mrprompt.py
Enter something: something
something
~: echo foo | python mrprompt.py
Enter something: something
foo
something
我想,用不同的措辞,子shell有可能知道其父shell的tty吗?在Python中,是否可以交互父shell的tty?我在GNU屏幕内部使用bash(因此,读取'SSH TTY'环境变量不是一个可行的选择)。在
可以在同一程序中同时接受管道输入和用户输入。在
最简单的处理方法是使用
subprocess
模块。您将从Python程序中执行该程序。它的参数允许您设置与正在执行的程序之间的管道。在很简单。这是标准的。效果很好。在
通过程序参数接受文件也是如此。很简单。这是标准的。效果很好。作为一个额外的好处,在Windows中CMD.EXE/命令.COM会自动为管道使用临时文件。由于DOS/Windows不支持真正的管道,所以做任何更复杂的事情都没有好处。在
我知道命令行mysql客户机代码在处理管道输入之前接受用户的密码。Linux(可能还有macosx)的解决方案可能与Nemo发布的类似。如果这是你真正想要的行为,而你不在乎Windows,那就是你要使用的解决方案。(对于Windows,您需要使用类似wconio包的东西。http://newcenturycomputers.net/projects/wconio.html)
可以让用户输入并接受管道输出到另一个程序。有三个标准文件句柄:stdin、stdout和stderr。即使在stdout被重定向到一个文件时,也可以写入stderr。在
这或多或少起作用:
另存为
foo.py
,然后尝试echo goodbye | ./foo.py
当然,
/dev/tty
只存在于Unix上。如果在没有控制终端的进程中运行它,open()
可能会失败。。。在您可以检测您的
stdin
是否来自管道,就像您使用sys.stdin.isatty
一样。你得到了EOF
,因为你用stdin.read()
读取了all的输入,然后又试图用raw_input()
命令读取更多的内容。在你不能同时做管道输入和交互输入。如果是管道输入,
stdin
就没有其他的stdin
来处理raw_input
。唯一的stdin
是来自该文件的文件。在您需要做的是提供一种可选的方法,让脚本的适当部分从文件中读取输入,使用类似于
然后为其他部分提供交互式提示。在
相关问题 更多 >
编程相关推荐