Python脚本在异常时挂起,直到按ctrl-c

3 投票
1 回答
3809 浏览
提问于 2025-04-18 01:54

我在一台运行RH Linux的服务器上用Python 2.6.6运行Python脚本时遇到了问题。当我运行任何脚本并且出现异常时,脚本会一直卡住,直到我按下CTRL-C,这时它才会打印出错误信息。这种情况发生在我从命令行运行脚本时,而不是直接调用python,而是利用脚本第一行的shebang(也就是#!)来执行。如果我直接用python来执行脚本,就不会出现卡住的问题。我查找过类似的问题,但那些都是与特定库有关,而我这里是所有Python脚本都有这个问题。我还尝试在不同的服务器上运行同样的脚本,结果没有出现这个问题。我附上了一个我一直在测试的简单脚本,它尝试打开一个不存在的文件。

#!/usr/bin/env python
tempfile = open('noexists.txt','r')

当我在命令行中执行这个名为“test.py”的代码时,我得到了以下响应:

~/bin$> test.py
^CTraceback (most recent call last):
  File "/export/home/jwd3/bin/test.py", line 2, in <module>
    tempfile = open('noexists.txt','r')
IOError: [Errno 2] No such file or directory: 'noexists.txt'

如果我用“python test.py”来执行它,那么我得到的响应是:

~/bin$> python test.py
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    tempfile = open('noexists.txt','r')
IOError: [Errno 2] No such file or directory: 'noexists.txt'

这里的区别不太明显,但在执行时非常明显。看看第一个输出示例,注意到在Traceback之前有个“^C”。在我按下CTRL-C之前,脚本一直在卡住。第二个输出示例则是立即返回了异常的错误信息,没有卡住。

我尝试把脚本移动到新位置,把shebang从#!/usr/bin/python改成#!/usr/bin/env python,甚至用不同的脚本测试,但结果都是一样的。任何帮助都会非常感激。我不想用“python ”的格式来调用所有的Python脚本。

1 个回答

0

感谢上面建议的帮助,我找到了问题的解决办法。通过运行 strace,我发现代码在一个 socket 连接上卡住了。接着我搜索了同样的 socket 连接信息,发现 Stack Overflow 上已经有一个类似的问题。然后我又找到了第二个问题,也很相似。这两个问题都有相同的建议。显然,Python 脚本和一个叫做 abrtd 的服务发生了冲突。建议是重启这个服务(abrtd)。重启后,Python 脚本卡住的问题就解决了。

撰写回答