代码之家  ›  专栏  ›  技术社区  ›  v25

Python:从STDIN读取数据,除非没有提供它

  •  0
  • v25  · 技术社区  · 5 年前

    我有一个python程序,它读取STDIN:

    #!/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
    

    ... 程序只是挂起,好像在等待标准输入。

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

    0 回复  |  直到 5 年前
        1
  •  0
  •   HK boy user11626805    5 年前

    正如@klausd.所建议的,使用不同的命令行参数应该是最简单的选择。

    sys.argv[i] 返回索引处的参数 i 启动脚本时使用。指数 0

    if __name__ == '__main__':
        import sys
        objective = sys.argv[1]
        if objective == 'read':
            data = sys.stdin.read()
            if data:
                my_func(data)
        else:
            print ('I am some other functionality')
    
        2
  •  0
  •   Peter Sutton    5 年前

    许多Unix风格的程序都在寻找破折号 - 指示来自标准输入的输入。所以

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