如何通过Automator运行Python脚本以查看调试/错误信息?

3 投票
2 回答
531 浏览
提问于 2025-04-18 04:42

目前,如果我使用 Run shell script 并在这里启动 Python 脚本:

/usr/bin/python /Users/myuser/script.py "$1"

如果脚本执行失败,出现了异常,Automator 会返回一个错误信息,但这个信息没有任何用处:

Run Shell Script failed - 1 error
Traceback (most recent call last):

有没有办法运行这个 shell 脚本,看到所有的调试信息(或者说在终端中运行 Python 脚本)?

2 个回答

0

当程序出错时,程序会停止运行,并且输出的信息会被简化成一个错误的简短版本(这个版本通常没有什么用)。

比如,运行这里的有问题的代码链接,你只会看到这样的信息:

1 error on line 2

为了避免这种情况,你需要捕捉所有的错误。

可以使用 try: ... except 这样的结构:

try:
    l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
    reduce(lambda x, y: x.extend(y), l)
except Exception as error:
    print(repr(error))

这样你就能看到以下输出:

AttributeError("'NoneType' object has no attribute 'extend'",)

如果你想要更多的信息,可以稍微修改一下代码:

from sys import exc_info
from traceback import extract_tb
try:
    l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
    reduce(lambda x, y: x.extend(y), l)
except Exception as error:
    print(repr(error))
    print("Line number: ", extract_tb(exc_info()[2])[0][1])

输出结果是:

AttributeError("'NoneType' object has no attribute 'extend'",)
('行号: ', 5)

0

我觉得你接下来的最佳方法是使用Python调试器,具体可以在你的py脚本中加上:

import pdb

pdb.set_trace()

更多信息可以在这里找到:

https://docs.python.org/2/library/pdb.html

撰写回答