import sys
if something_to_read_from_stdin_aka_piped_to:
cmd = sys.stdin.read()
print(cmd)
else:
print("standard behavior")
echo "test" | python myscript.py
如果它没有被管道传输,它就会挂起。
知道脚本应该或不应该从stdin读取的方法是什么?我希望除了脚本的命令行参数之外还有一些明显的东西。
答案 0 :(得分:9)
是的,这是非常可能的,我已经修改了你的例子来实现这一点。
select()
我们知道0是用于输入程序的文件描述符。 isatty是测试检查文件描述符是否指向终端。 正如其他用户所指出的那样,将告诉程序是否正在从终端读取。然而,上述编程解决了问题的目的,但仍有改进的余地。我们可以有另一个解决方案,只检测程序是否正在读取管道。
import sys
import os
if not os.isatty(0):
cmd = sys.stdin.read()
print(cmd)
else:
print("standard behavior")