【发布时间】:2017-11-23 10:35:42
【问题描述】:
python pythontop.py # 挂在 test.sh 中。 cat of urandom 根本不会被截断
pythontop.py
import subprocess
subprocess.call(['test.sh'])
test.sh
RAND=`cat /dev/urandom | tr -dc 'a-zA-Z0-9'| fold -w 10 | head -n 1`
编辑:人们对任何混淆表示歉意。事实证明,简单地从 python 本身调用 shell 脚本会导致脚本挂起。
更新:
更多更新。如果我在头前插入一个发球台。我收到一条损坏的管道消息。这意味着 head 完成了它的工作。有一条线并关闭了文件。 cat /dev/urandom | tr -dc 'a-zA-Z0-9'| fold -w 10 | tee | head -n 1
我看到脚本仍然挂起,即使在破管消息之后!
更新:
伙计们,我发现这很容易在 linuxcontainers.org 机器中重新创建。我这样做是为了让那些阅读这个问题的人可以通过他们自己的实验来证实这一观察结果。因为这似乎有点难以实现。
https://linuxcontainers.org/lxd/try-it/
【问题讨论】:
-
为什么要从
python调用perl,而后者又调用sh脚本? -
对我有用...pythontop.py 不会挂起(使用 python 2.7 和 perl 5.24)
-
感谢您的回复。让我检查一下版本..
-
卡在我无法修改的大型 perl 代码库中。正在编写一个快速的python代码来检查一些东西..以一种自动化的方式。现在,有人能告诉我对一个问题投反对票是什么意思吗?拒绝一个问题似乎很荒谬,除非它是多余的并且在整个互联网上都得到了回答。我总是可以更改生成随机文件名的方式,但我很好奇,出于可能的原因来到这里。
-
我现在已经删除了中间的 perl 步骤.. 仍然为我挂起.. 但正如 xxfelixxx 指出的那样,他认为没有问题.. 让我试试他的版本