【问题标题】:Why does python exit immediately when I pipe code in with echo but not with cat?为什么当我使用 echo 但不使用 cat 管道输入代码时,python 立即退出?
【发布时间】:2018-11-28 20:44:35
【问题描述】:
#!/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 这样做?

【问题讨论】:

  • 我认为这与 Python 无关; cat | cat &lt;&lt;EOF... 效果一样。
  • cat的正确用法是cat stackoverflow.com/questions/7046381/…

标签: python python-3.x bash echo cat


【解决方案1】:

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

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

cat,您使用它的方式,会将其标准输入通过管道传输到标准输出,成为管道另一侧的 proc 的标准输入,但您还定义了一个 &lt;&lt;EOF here-doc,它优先并忽略cat 的空输出。

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 2021-03-17
    • 2010-12-07
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2019-12-16
    相关资源
    最近更新 更多