python - 检测 STDIN 文件并阻止用户在 Python 中输入
问题描述
我想编写一个命令行 Python 程序,该程序可以在 Windows cmd.exe 提示符下使用 STDIN 语法调用,并在未提供输入文件的情况下将帮助文本打印到 STDOUT。
STDIN 语法与参数语法不同,它是替代解决方案所必需的:
my_program.py < input.txt
这是我到目前为止所拥有的:
import sys
# Define stdout with \n newline character instead of the \r\n default
stdout = open(sys.__stdout__.fileno(),
mode=sys.__stdout__.mode,
buffering=1,
encoding=sys.__stdout__.encoding,
errors=sys.__stdout__.errors,
newline='\n',
closefd=False)
def main(args):
lines = ''.join([line for line in sys.stdin.readlines()])
lines = lines.replace( '\r\n', '\n' ).replace( '\t', ' ' )
stdout.write(lines)
if __name__=='__main__':
main(sys.argv)
我无法弄清楚如何检测是否向 STDIN 提供了文件,如果没有,则阻止提示用户输入。 sys.argv
不包含标准输入。我可以将它包装在带有计时器的线程中并等待一些文件访问上限时间并确定可能未提供文件,但我想看看是否有更好的方法。我在 SO 中搜索了这个问题,但找不到避免计时器的答案。
解决方案
测试.py:
import sys
if sys.__stdin__.isatty():
print("stdin from console")
else:
print("stdin not from console")
执行:
> test.py
stdin from console
> test.py <input.txt
stdin not from console
推荐阅读
- r - 基础 R 图:帮助减少多个图之间的空间
- python-3.x - 在Python中为变量赋值两次
- excel - 创建超过 32 个字符的 SAS 列名称以导出到 Excel
- node.js - 在 MongoDB 中存储数据的最佳方式是什么?
- java - JPA 实体字段的默认值
- spring-boot - 如何在 Spring Boot 中将 Tomcat 绑定到域和端口
- mongodb - 如何获取上下文服务mongodb图集
- c# - Razor 类库图像显示在登录页面上,但未显示在任何其他页面上
- ruby - 在 Window 上的 VS Code 上找不到 Bash 命令
- css - 暗模式切换 - 两个按钮 - 只有一个有效