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