加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Python CLI脚本中的管道和提示

发布时间:2020-12-13 18:59:04 所属栏目:Linux 来源:网络整理
导读:是否可以在Python CLI脚本中组合管道输入和TTY提示?例如,运行这个: import syspiped_text = Noneif not sys.stdin.isatty(): piped_text = sys.stdin.read()user_in = raw_input('Enter something: ')if piped_text: sys.stdout.write(piped_text)sys.stdo

是否可以在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()可能会失败……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读