#!/bin/bash
echo "print('Hello 1')" | python3
cat | python3 -u <<EOF
print('Hello 2')
EOF
echo "print('Hello 3')" | python3
此输出
Hello 1
Hello 2
在打印最后的Hello 3
之前,它将等我按Enter键。它还使用python的-u
标志实现无缓冲输出。
为什么它为cat
而不是echo
这样做?
答案 0 :(得分:8)
您不使用猫。您正在使用此处文档,而cat正在分别等待输入。只需移除cat |
,然后重试即可。
echo "print('Hello 1')" | python3
python3 -u <<EOF
print('Hello 2')
EOF
echo "print('Hello 3')" | python3
cat(使用它的方式)会将其stdin通过管道传递到其stdout,从而成为管道另一侧proc的stdin,但是您还定义了<<EOF
这里文档,该文档具有优先权并忽略cat
的空输出。
cat仍在等待 input 。一旦您按回车键(通过OS Magic),它就会尝试并意识到没有人在听管道,然后退出。
顺便说一句,您还可以使用here字符串,如下所示:
python3 <<< "print('Hello 2')"