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

Ant*_*Oca 13 python bash

每当我尝试$ a在控制台(/ bin/bash)中调用不存在的命令(例如)时,解释器就会等待很长时间.当我中断它(^ 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
Run Code Online (Sandbox Code Playgroud)

Eve*_*sle 16

你在ubuntu机器上吗?Ubuntu有一个在python中实现的命令未找到的包,你可能已经打断了它.

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


Pat*_*ins 7

如果设置PATH=""修复它,那么某些东西正在影响一个被包调用的python command-not-found包.我最近自己编写了一个名为的脚本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
Run Code Online (Sandbox Code Playgroud)

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

这是一个shell one-liner为你做的:

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

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

echo 'print("HELLO WORLD")' >> struct.py
Run Code Online (Sandbox Code Playgroud)

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

?  client git:(master) ? a
HELLO WORLD
zsh: command not found: a
Run Code Online (Sandbox Code Playgroud)

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