gpt4 book ai didi

python - 从 bash 中的内联 python 读取标准输入

转载 作者:太空狗 更新时间:2023-10-29 22:11:10 24 4
gpt4 key购买 nike

谁能解释为什么这个简短的 bash/python 命令不输出“hello”

$ echo hello | python - <<END
import sys
for line in sys.stdin:
print line
END

如果我将我的 python 脚本保存到一个文件中,此命令将按预期工作。

在 script.py 中

import sys
for line in sys.stdin:
print line
END

$ echo “你好” | python脚本.py

“你好”

最佳答案

它不起作用的原因是您有冲突的重定向。 echo | python尝试将标准输入连接到来自 echo 的管道, 而 python - <<HERE试图将标准输入与此处文档联系起来。你不能两者兼得。 (这里的文档胜出。)

但是,确实没有理由要将脚本本身通过管道传输到标准输入。

bash$ echo hello | python -c '
> import sys
> for line in sys.stdin:
> print line'
hello

另一种解决方案可能是将您的数据嵌入脚本本身的三重引号字符串中。

python <<\____
import sys

data = """
hello
so long
"""

for line in data.strip('\n').split('\n'):
print line
____

三重引号之间的换行符都是文字,但 .strip('\n')从开头或结尾删除任何内容。 (当然,如果最后有重要的换行符,则不能这样做。)

here-document 分隔符之前的反斜杠表示不在 here 文档中执行任何变量插值或命令替换。如果您想使用这些功能,请将其删除(但当然要注意单独转义 Python 代码中的任何字面美元符号或反引号)。

关于python - 从 bash 中的内联 python 读取标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com