Python CLI脚本中的管道和提示

Python CLI脚本中的管道和提示,第1张

概述是否可以在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 pip

是否可以在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.stdout.write(user_in + '\n')  

产生以下输出:

~: python mrprompt.pyEnter something: somethingsomething~: echo foo | python mrprompt.pyEnter something: Traceback (most recent call last):  file "mrprompt.py",line 9,in 

当我正在寻找的输出是这样的:

~: python mrprompt.pyEnter something: somethingsomething~: echo foo | python mrprompt.pyEnter something: somethingfoosomething

我想,换句话说,子shell是否有可能知道其父shell的tty?在Python中,是否有可能与父shell的tty进行交互?我在GNU Screen中使用bash(因此,读取’SSH_TTY’环境变量不是一个可行的选择).最佳答案这或多或少有效:

#!/usr/bin/pythonimport syssaved_stdin = sys.stdinsys.stdin = open('/dev/tty','r')result = raw_input('Enter something: ')sys.stdout.write('Got: ' + result + '\n')sys.stdin = saved_stdinresult2 = sys.stdin.read()sys.stdout.write('Also got: ' + result2)

保存为foo.py并尝试echo goodbye | ./foo.py

当然,/ dev / tty只存在于Unix上.如果你在没有控制终端的进程中运行它,open()可能会失败……

总结

以上是内存溢出为你收集整理的Python CLI脚本中的管道和提示全部内容,希望文章能够帮你解决Python CLI脚本中的管道和提示所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1046657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)