为什么python异常行为依赖于argv [0]?

时间:2013-06-27 19:23:48

标签: python linux exception

我正在开发一个linux系统,其中未处理的python异常导致脚本挂起而不是通过堆栈跟踪退出。我意识到它似乎取决于脚本的路径。例如,这可以按预期工作

$ echo 'raise Exception("This is a test exception.")' > test-exception.py
$ python test-exception.py
Traceback (most recent call last):
  File "test-exception.py", line 1, in <module>
    raise Exception("This is a test exception.")
Exception: This is a test exception.

但这无限期地挂起

$ python $PWD/test-exception.py

如果我按CTRL-C发送进程SIGINT,那么堆栈跟踪将照常打印并返回程序。

我无法在其他各种计算机上复制此行为,因此我怀疑该计算机是fubar并且某些系统调用正在挂起。以下是strace输出的最后几行

$ strace python $PWD/test-exception.py
[... snip]
munmap(0x7f33193d8000, 266240)          = 0
brk(0x24a9000)                          = 0x24a9000
brk(0x24e1000)                          = 0x24e1000
close(4)                                = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 4
connect(4, {sa_family=AF_FILE, path="/var/run/abrt/abrt.socket"}, 27

发生了什么事?为什么argv [0]会更改异常处理?

0 个答案:

没有答案