python - Python:从 STDIN 读取数据,除非未提供
问题描述
我有一个从 STDIN 读取的 python 程序:
#!/usr/bin/env python
def my_func(data):
print (data)
if __name__ == '__main__':
import sys
data = sys.stdin.read()
my_func(data)
当我执行此操作时,我看到了预期的结果:
cat file.txt | ./app.py
我想在程序中添加一些其他功能:
if __name__ == '__main__':
import sys
data = sys.stdin.read()
if data:
my_func(data)
else:
print ('I am some other functionality')
但是,当我执行此操作时:
./app.py
...程序只是挂起,好像它正在等待 STDIN 输入。
编写这个的正确方法是什么,所以它将处理两种执行方法。
解决方案
许多 Unix 风格的程序寻找一个破折号-
来表示来自标准输入的输入。所以,
import sys
if sys.argv[1] == '-':
read_from_stdin()
else:
other_action()
$ ./app.py - < /path/to/input
推荐阅读
- angular - Angular CLI Css 注入而不是重新加载
- c# - C# WPF PowerModeChanged 在 Surface 上不起作用
- windows - jupyter notebook 服务器错误:错误
- android - 错误:(32, 13) 无法解决:com.google.firebase:firebase-firestore:10.0.1
- c# - 如何实现取决于复选框更改为 Datagrid 的功能?
- android - 删除 Room Android 中的大表
- windows - 当我尝试通过 PowerShell 在 Active Directory 中搜索已删除的用户时,为什么会出现空白屏幕?
- python - Python3.x RuntimeError:事件循环已关闭
- c# - Newtonsoft.Json - 将通用对象反序列化为包装类
- java - 在java中将JSON从ajax请求转换为JSON对象