有没有办法让python脚本“知道”它是否被管道传输?

时间:2016-02-06 23:30:27

标签: python pipe

myscript.py

import sys
if something_to_read_from_stdin_aka_piped_to:
    cmd = sys.stdin.read()
    print(cmd)
else:
    print("standard behavior")

Bash示例:

echo "test" | python myscript.py

如果它没有被管道传输,它就会挂起。

知道脚本应该或不应该从stdin读取的方法是什么?我希望除了脚本的命令行参数之外还有一些明显的东西。

1 个答案:

答案 0 :(得分:9)

是的,这是非常可能的,我已经修改了你的例子来实现这一点。

select()

我们知道0是用于输入程序的文件描述符。 isatty是测试检查文件描述符是否指向终端。 正如其他用户所指出的那样,将告诉程序是否正在从终端读取。然而,上述编程解决了问题的目的,但仍有改进的余地。我们可以有另一个解决方案,只检测程序是否正在读取管道。

import sys
import os
if not os.isatty(0):
    cmd = sys.stdin.read()
    print(cmd)
else:
    print("standard behavior")