在bash中从内联python中读取stdin

wil*_*ill 6 python bash

有人可以解释为什么这个短的bash/python命令不输出"你好"

$ echo hello | python - <<END
import sys
for line in sys.stdin:
  print line
END
Run Code Online (Sandbox Code Playgroud)

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

在script.py中

import sys
for line in sys.stdin:
  print line
END
Run Code Online (Sandbox Code Playgroud)

$ echo"你好"| python script.py

"你好"

tri*_*eee 5

它不起作用的原因是你有重叠的冲突. echo | python尝试将标准输入绑定到管道echo,同时python - <<HERE尝试将标准输入绑定到此文档.你不能两者兼得.(这里的文件获胜.)

但是,实际上没有理由想要在标准输入上管道脚本本身.

bash$ echo hello | python -c '
> import sys
> for line in sys.stdin:
>   print line'
hello
Run Code Online (Sandbox Code Playgroud)


Ell*_*sch 4

因为python << END重定向标准输入来读取程序。您也无法读取从echo标准输入通过管道传输的行。