gpt4 book ai didi

python - IPython 脚本 - 带有状态代码的退出脚本

转载 作者:行者123 更新时间:2023-12-02 08:21:09 26 4
gpt4 key购买 nike

我正在尝试使用 ipython 编写 git 预提交 Hook 脚本,因为它有一个很好的语法来运行 shell 命令并将 stdout 结果转换为字符串列表(这使得处理变得容易)。

我需要从 ipython 脚本返回状态代码 != 0,以便 git 预提交 Hook 将中止提交。

考虑这个示例脚本

#! /bin/ipython
import sys
sys.exit(1)

从 shell 运行它

$ ipython test.ipy

但是使用 $ echo $? 检查状态代码总是返回 0

有没有办法让 ipython 返回非零状态代码?

最佳答案

打开 ipython 并尝试以交互方式运行该代码。

In [1]: import sys
In [2]: sys.exit(1)

An exception has occurred, use %tb to see the full traceback.

SystemExit: 1

To exit: use 'exit', 'quit', or Ctrl-D.

因此,ipython 正在捕获 SystemExit 异常。我建议为这个特定的工作使用不同的解释器,就像 ipython 一样好。或者您可以使用:

import os
os._exit(1)

但是,这会跳过各种重要的清理代码(例如 finally block ),并且通常是一个坏主意。

编辑:

这似乎有效。写完后,我能听到远处传来一些警钟,还有红旗在飘扬。不知道那是关于什么的。无论如何,创建一个新脚本 /usr/bin/ipysh :

#!/usr/bin/python

import sys
from IPython.core import interactiveshell
shell = interactiveshell.InteractiveShell()
shell.safe_execfile(sys.argv[1], {}, raise_exceptions=True,
exit_ignore=False)

使该可执行文件成为可执行文件,然后将钩子(Hook)的 hashbang 设置为 #!/usr/bin/ipysh

关于python - IPython 脚本 - 带有状态代码的退出脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com