我该如何指示我的Python shell脚本返回错误?

8

我正在使用Python编写一个Shell脚本(#!/usr/bin/env python)。因为我对Shell脚本不太熟悉,所以如果我理解有误,请谅解。

我的当前认识是,如果我的Shell脚本成功工作,那么我应该调用sys.exit()来指示它成功执行(即返回0)。

如果我遇到了错误(特别是用户传递了我不希望出现的参数),那么我应该返回什么?如何处理?

只需要使用任何非零值调用sys.exit(),例如sys.exit(1),可以吗?


1
你试过了吗?你观察到了什么?请先尝试一下。在尝试后,请用你的观察结果更新问题。 - S.Lott
5
他询问的是规定,而不是如何执行它。 - Tom Zych
1
+1 因为询问如何与他人友好相处。请注意:“shell 脚本”一词应该是指“在 shell 语言中编写的脚本”。只需说“脚本”或“Python 脚本”。 - Tom Zych
1
@S.Lott:不,目前我没有任何东西查看脚本的返回值。只是试图避免将来出现我不理解的错误,以防返回值很重要。我找不到任何易于理解的文档来解决这个问题,所以希望这个问题的答案能填补这方面的空白。 - Paul D. Waite
3
@S.Lott:感谢您的业余远程心理分析,但我已经非常自信。在这里没有什么需要尝试的。我还没有检查返回值,并且我不知道Unix程序如何对返回值做出反应。我只是想知道错误时它应该是什么。显然,很抱歉用一些非常明显的问题搅乱了Stack Overflow,但是由于我试图使我的标题非常描述性,您总有不阅读它们的选项。 - Paul D. Waite
显示剩余5条评论
2个回答

7

大多数Shell工具在发生错误时会有不同的返回值。

标准规定,以状态码0退出表示执行成功结束。

对于其他错误代码,这取决于实用程序本身。您最有可能在上述实用程序的man页面中了解错误代码。

这是ls man页面的一个简单示例:

Exit status:
   0      if OK,

   1      if minor problems (e.g., cannot access subdirectory),

   2      if serious trouble (e.g., cannot access command-line argument).

强烈建议您正确记录实用程序的退出代码,以便其用户正确使用。


你知道我应该把Python shell脚本的退出代码文档放在哪里吗?它的docstring可以吗? - Paul D. Waite
1
手册页、信息页、自述文件和文档字符串都可以使用 :) - SirDarius
1
@Paul:如果你还没有的话,可以尝试使用argparse模块。虽然需要一些阅读,但如果你会去创建需要参数的CLI工具的话,它非常值得一试。Argparse提供了一个简单的方法来呈现文档,当从shell传递-h--help选项时可以很容易地展示出来。 - intuited

6
任何非零值都可以。因此,sys.exit(1)是正确的。这些错误代码对于在命令行上使用脚本非常有用:
python test.py && echo 'success'

上述代码在脚本返回0以外的任何内容时都不会打印“success”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接