为什么 python 当我使用 echo 而不是 cat 管道代码时立即退出?

Why does python exit immediately when I pipe code in with echo but not with cat?

#!/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 之前,它会等我按回车键。它还使用 python 的 -u 标志来实现无缓冲输出。

为什么 cat 而不是 echo

您没有使用猫。您正在使用 here-doc,而 cat 正在单独等待输入。只需删除 cat | 并重试。

echo "print('Hello 1')" | python3
python3 -u <<EOF
print('Hello 2')
EOF
echo "print('Hello 3')" | python3

cat,你使用它的方式,会将它的标准输入通过管道传输到它的标准输出,成为管道另一端的过程的标准输入,但你还定义了一个 <<EOF here-doc优先并忽略 cat 的空输出。

cat 仍在等待 input。一旦你点击 return 它(通过 OS 魔法)尝试并意识到没有人在管道上监听,然后退出。

顺便说一句,您也可以使用 here-string,如下所示:

python3 <<< "print('Hello 2')"