我在python 2.6上运行我的脚本。要求如下所述。
一个目录中有大约100个测试脚本(所有python脚本)。我必须创建一个主python脚本,它将逐个开始运行所有100个测试脚本,然后我必须显示测试用例是否失败。每个脚本都会调用sys.exit()
来完成脚本的执行。目前我正在从主脚本中读取sys.exit()
值,我正在确定特定测试用例是否失败。
但现在需要更改我必须显示日志文件名(在运行脚本时将创建日志文件)。那么我可以将元组作为参数(包含状态和日志文件名)发送到sys.exit()
而不是发送整数值吗?
我在网上读到如果我们传递一个非整数的参数,None
相当于传递零,而任何其他对象都打印到stderr
并导致退出代码为1。因此,如果我将一个元组作为参数传递,即使在成功的情况下os
也会认为是失败,因为我没有通过None
?
我在主脚本中使用subprocess.popen()
来运行脚本,我使用format()
来读取sys.exit()
值。
答案 0 :(得分:3)
sys.exit()
设置流程退出代码,就是这样。进程没有规定对该代码执行任何其他操作,但将其设置为整数。
您可以将数据写入sys.stdout
或sys.stderr
,您的主脚本可以从这些流中读取。
当然,如果您将任何其他类型的对象(除了None
或整数)传递给sys.exit()
,它会将其作为字符串写入sys.stderr
给您,但在这种情况下,退出代码总是将设置为1
;你不再能控制退出状态。在明确写入输出流之后,最好显式设置退出状态。
只需使用subprocess.Popen()
object,将stdout
或stderr
设置为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等的约定,并且不是必需的。据说这些约定是非常好的原因。