使用Flask-Script / Python从标准输入读取

时间:2015-08-18 23:44:03

标签: python flask stdin flask-script

现在我有flask-script命令,它以路径作为参数,然后从路径中读取:

@manager.option('-f', '--file', dest='file_path')
def my_command(file_path):
     open(file_path)
     ...

我希望它能够从标准中读取。 (我经常需要在剪贴板上传递文本,每次都必须创建一个文件很烦人。)

我该如何做到这一点?

我尝试使用fileinput.input(),通过此https://stackoverflow.com/a/1454400/1164573调用以下内容:

cat << EOF | ./manage.py my_command
abc
def
ghi
EOF

但是fileinput.input()是空的。这是因为烧瓶脚本正在包装我的功能而不直接暴露标准吗?我怎么能绕过这个?

1 个答案:

答案 0 :(得分:0)

你可以像你的例子那样做,但是使用进程替换而不是管道:

./manage.py my_command <(cat <<EOF
abc
def
ghi
jkl
EOF
)

适用于我的简单测试。 。 。假设你至少为你的shell使用bash。我只使用bash,所以不知道这种语法是否适用于其他shell。

或者,您可以测试特殊值的文件名值,通常为-,并使用sys.stdin,如果这是要读取的文件的名称。

if(sys.argv[1] == '-'):
    f = sys.stdin
else:
    f = file(sys.argv[1])

for line in f:
    print line

等等