如何在从另一个脚本运行Python脚本时获取正确的退出码?

3

我有一个文件one.py

import sys
sys.exit(-23)

当我从另一个文件中使用以下两种方式调用它时:

ans = subprocess.call("python c:\python27\one.py")
                  or 
ans = os.system("python c:\python27\one.py")

它返回值“2”,但我想要的值是-23。

我们该怎么做?

编辑:有人将其标记为另一个问题的可能重复项,但实际上这个问题与Python及其调用相关,其中退出代码如何工作...如何运行另一个Python脚本有很多答案,但没有人在那个问题中讨论退出代码...事实上,在提问之前我已经适当地搜索了那个问题。


可能是重复的问题:为什么我的bash函数返回了错误的值? - tripleee
@tripleee,请仔细阅读问题...它是关于Python的... - niyant
不,这是关于底层平台支持哪些退出代码的问题。 - tripleee
可能吧,但问题是它与Python程序相关。您的声望比我高得多,所以您可能比我知道更多。但那个问题并没有恰当地回答我的问题,恕我直言。 - niyant
1个回答

1

你有两个问题

1)你使用了负的退出代码,但它们并不总是可行的。你可能会得到233作为退出代码(退出代码被视为无符号字节,因此可以在0-255之间)。

2)当你尝试以shell形式运行它时,你会收到一个错误,你可以通过以下方式使其工作

ans = subprocess.call(['python',r"c:\python27\one.py"]) # This r before addr. is important.. else you will still get the same value

或者不太推荐的方法是使用 shell=True 参数,如下所示:

ans = subprocess.call(r"python c:\python27\one.py", shell=True)

但这不被推荐,因为存在安全问题(如果用户输入可以影响您的命令)。

我像这样输入了sys.exit(12)的值,但仍然只得到了2作为答案。 - niyant
1
也许你需要在字符串开头加上 r,变成 r"c:\python27\one.py",因为这个字符串包含了 \。如果这样还不行,那么可以尝试从命令行中运行它,比如 "python c:\pyhon27\one.py",看看会发生什么。 - DorElias

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