3

现在我有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()是空的。这是因为烧瓶脚本正在包装我的函数而不是直接将标准暴露给它吗?我怎样才能解决这个问题?

4

1 回答 1

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

等等

于 2015-08-19T00:03:04.953 回答