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

时间:2018-06-19 19:53:11

标签: python python-3.x bash echo 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之前,它将等我按Enter键。它还使用python的-u标志实现无缓冲输出。

为什么它为cat而不是echo这样做?

1 个答案:

答案 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')"