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。代码是用这一行调用的(用 main
是 myscript.py
):
sys.exit(main())
我相信这是因为 sys exit 将任何非 0 returned 值作为退出代码 1(异常)。
将 myscript.py
中的代码更改为 log
输出而不是 return 输出,修复了退出代码问题。
我有一个 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。代码是用这一行调用的(用 main
是 myscript.py
):
sys.exit(main())
我相信这是因为 sys exit 将任何非 0 returned 值作为退出代码 1(异常)。
将 myscript.py
中的代码更改为 log
输出而不是 return 输出,修复了退出代码问题。