首页 > 解决方案 > 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 输入。

编写这个的正确方法是什么,所以它将处理两种执行方法。

标签: python

解决方案


许多 Unix 风格的程序寻找一个破折号-来表示来自标准输入的输入。所以,

import sys

if sys.argv[1] == '-':
    read_from_stdin()
else:
    other_action()
$ ./app.py - < /path/to/input

推荐阅读