Python subprocess.check_call终止并从终止的位置开始

时间:2015-02-09 13:38:41

标签: python subprocess terminate

我试图通过使用输入和输出文件调用另一个python脚本,使用subprocess_check.call()自动化一些测试用例。我有约。 10个输入文件。例如,当我开始测试时,第一个和第二个文件已成功测试,但在第三个文件中,我收到错误,脚本终止。我想要的是,如何从终止它的地方运行我的脚本?我不想从头开始。我只是想从我收到错误的情况继续我的测试。在更正输入文件后,从这个文件开始,我想运行脚本直到结束。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

所以,这不是涉及代码的问题,所以你得到一般答案,而不涉及代码。

问题的解决方案要求您保留协议。该协议必须在测试过程的整个生命周期内存在。

因此,必须有一些地方可以写入关于测试状态,这个地方必须确保持久性。可能是什么?对,就是文件系统。跟踪测试的最简单的地方是文件系统。

以下是您可能希望如何实现此操作的一个非常简单的示例:对于成功的每个测试用例,将文件写入当前工作目录,表示此测试成功。然后,在您的测试过程调用某个测试之前,请检查是否存在此类文件,并在找到该文件时跳过测试。我们假设您的输入文件具有不同的基本名称(例如AB,...,)。然后,您可以在当前工作目录中使用名为B.success的文件,以指示不再需要对其进行测试。

答案 1 :(得分:-1)

我认为我有一个准确的答案,不使用此任务的子进程(除非你真的必须)。

假设要测试的脚本的格式为

script1.py

import sys

def main1(args):
    #do something awesome with args
    return some_cool_value

if __name__ == "__main__":
    filename = sys.argv
    main1(filename)

那么你正在做的是使用subprocess来评估它的输出,当你可以做的是以下内容时:

main_test.py

from script1 import main1 # you may want to rename main is you have  loads of scripts

def test__main(filenames):
     for name in filenames:
          try:
              result1 = main1(name)
              # do something with result
              print "file "+ name+ " processed successfully!"
          except:
              print "file "+ name+ " not processed successfully!"



if __name__ == "__main__":

    filenames = sys.argv
    main(fienames)

并记录哪些文件在处理时成功,因此您可以在必要时在正确的位置重新启动。

我想工作流程是这样的:

 python main_test.py passingfile1 corruptedfile2

 >>> file passingfile1 processed successfully
 >>> file corruptedfile2 not successfully processed 

然后你可以从corruptedfile2重新运行脚本。

通常我会尽量避免使用subprocess调用python脚本,并且只在没有其他接口的情况下才将它用于已编译的二进制文件