Python virtualenv bin 脚本总是以代码 1 退出

Python virtualenv bin scripts always exit with code 1

我有一个 virtualenv,其中有一些 scripts/applications 随我的应用程序一起打包。

假设它看起来像这样:

ls /venv/bin/

activate
myscript
python
...

当我 运行 myscript

/venv/bin/python /venv/bin/myscript

/venv/bin/myscript

我正确执行myscript;但是,当我知道它成功时,返回的退出状态返回 1。

myscript 正在通过 setup.py 中的 entry_point 脚本复制到 /bin:

entry_points={
        'console_scripts': [
        'myscript=myscript.__main__:main',
      ],
},

我看到复制过来的 myscript 实际 版本有一些额外的代码,可能会破坏退出。

运行 存在于 /venv/bin 中的包是否有正确的方法来避免错误的退出代码?


额外信息:

可执行文件本身看起来像:

from myscript.__main__ import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

此问题是由 myscript.py 代码引起的。在这个文件中,代码在命中时退出:

return "Something that the user would see"

myscript.py直接从终端运行时,它的退出代码是0。

当它在一个单独的文件中调用时(在我的例子中,包装脚本被打包为 console_scripts),它的退出代码是 1。代码是用这一行调用的(用 mainmyscript.py):

sys.exit(main())

我相信这是因为 sys exit 将任何非 0 returned 值作为退出代码 1(异常)。

myscript.py 中的代码更改为 log 输出而不是 return 输出,修复了退出代码问题。