python解释器捕获bash中无法识别的命令

时间:2015-05-12 07:08:49

标签: python bash

每当我尝试在控制台(/ bin / bash)中调用不存在的命令(例如$ a)时,解释器就会等待很长时间。当我中断它(^ C)时,我从Python解释器收到一条错误消息。而不是那样,我希望它告诉我该命令未被识别。为什么会这样?

$ a
^C
Traceback (most recent call last):
  File "/usr/lib/python2.7/encodings/__init__.py", line 32, in <module>
root@dell:/home/antonio/workspace/biz_index#     from encodings import aliases
  File "/usr/lib/python2.7/encodings/aliases.py", line 17, in <module>
    """
KeyboardInterrupt
^C

2 个答案:

答案 0 :(得分:16)

你在ubuntu机器上吗? Ubuntu有一个command-not-found package,它是用python实现的,你可能已经打断了它。

在您的路径中,可能存在一个与command-not-found包调用的脚本同名的脚本。如果有的话,这个脚本很可能是那个挂起的人。要以可读的方式打印路径,请运行echo $PATH | tr -s ':' '\n'

答案 1 :(得分:7)

如果设置PATH=""修复了它,那么某个地方正在隐藏一个被command-not-found包调用的python包。我最近自己编写了一个名为struct.py的脚本。您需要遍历路径中的每个目录,即

/home/antonio/.local/bin
/home/antonio/.local/bin
/usr/local/sbin
/usr/local/bin‌​
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games

并在那里查找.py个文件。其中一个与内置Python包之一共享一个名称。或者,您可以从PATH中删除目录并将其重新添加,直到找到哪个目录为止。找到后,您需要将其删除或重命名。

这是一个贝壳单行为你做的:

for dir in $(echo $PATH | tr ":" "\n"); do ls -1 $dir | grep "[.]py"; done

您可以尝试以下方法在自己的shell中测试一下(从几天前重新创建我的错误):

echo 'print("HELLO WORLD")' >> struct.py

现在在我的shell中,留在当前目录中,我看到:

➜  client git:(master) ✗ a
HELLO WORLD
zsh: command not found: a

据推测,在您的案例中进行阴影处理的Python脚本正在做的事情比仅打印“HELLO WORLD”更耗费资源,因此悬而未决。