我们可以将一个元组作为参数发送到python中的sys.exit()

时间:2014-04-04 19:03:43

标签: python

我在python 2.6上运行我的脚本。要求如下所述。

一个目录中有大约100个测试脚本(所有python脚本)。我必须创建一个主python脚本,它将逐个开始运行所有100个测试脚本,然后我必须显示测试用例是否失败。每个脚本都会调用sys.exit()来完成脚本的执行。目前我正在从主脚本中读取sys.exit()值,我正在确定特定测试用例是否失败。

但现在需要更改我必须显示日志文件名(在运行脚本时将创建日志文件)。那么我可以将元组作为参数(包含状态和日志文件名)发送到sys.exit()而不是发送整数值吗?

我在网上读到如果我们传递一个非整数的参数,None相当于传递零,而任何其他对象都打印到stderr并导致退出代码为1。因此,如果我将一个元组作为参数传递,即使在成功的情况下os也会认为是失败,因为我没有通过None

我在主脚本中使用subprocess.popen()来运行脚本,我使用format()来读取sys.exit()值。

2 个答案:

答案 0 :(得分:3)

不,你不能。 sys.exit()设置流程退出代码,就是这样。进程没有规定对该代码执行任何其他操作,但将其设置为整数。

可以将数据写入sys.stdoutsys.stderr,您的主脚本可以从这些流中读取

当然,如果您将任何其他类型的对象(除了None或整数)传递给sys.exit(),它会将其作为字符串写入sys.stderr给您,但在这种情况下,退出代码总是将设置为1;你不再能控制退出状态。在明确写入输出流之后,最好显式设置退出状态。

只需使用subprocess.Popen() object,将stdoutstderr设置为subprocess.PIPE,然后使用Popen.communicate() method从该管道流中读取数据:

proc = subprocess.Popen([executable, arg1, arg2],
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
status_code = proc.returncode

答案 1 :(得分:2)

是的,你是对的。传递元组会将元组打印到stderr并返回退出代码为1.必须返回None才能表示成功。

请注意,这是一个shell等的约定,并且不是必需的。据说这些约定是非常好的原因。