是否可以在Python CLI脚本中组合管道输入和TTY提示?例如,运行这个:
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')
产生以下输出:
~: python mrprompt.py
Enter something: something
something
~: echo foo | python mrprompt.py
Enter something: Traceback (most recent call last):
File "mrprompt.py",line 9,in
当我正在寻找的输出是这样的:
~: python mrprompt.py
Enter something: something
something
~: echo foo | python mrprompt.py
Enter something: something
foo
something
我想,换句话说,子shell是否有可能知道其父shell的tty?在Python中,是否有可能与父shell的tty进行交互?我在GNU Screen中使用bash(因此,读取’SSH_TTY’环境变量不是一个可行的选择).
最佳答案
这或多或少有效:
#!/usr/bin/python
import sys
saved_stdin = sys.stdin
sys.stdin = open('/dev/tty','r')
result = raw_input('Enter something: ')
sys.stdout.write('Got: ' + result + '\n')
sys.stdin = saved_stdin
result2 = sys.stdin.read()
sys.stdout.write('Also got: ' + result2)
保存为foo.py并尝试echo goodbye | ./foo.py
当然,/ dev / tty只存在于Unix上.如果你在没有控制终端的进程中运行它,open()可能会失败……