如何从python中的system()命令中捕获异常

时间:2015-07-02 23:04:29

标签: python error-handling

我有一个system()命令,我希望捕获它可能生成的异常。我的代码是:

def test():

    filename = "test.txt"
    try:
        cmd = "cp /Users/user1/Desktop/Test_Folder/"+filename+" /Users/user1/Desktop/"
        output = system(cmd)
    except:
        print 'In the except'
        traceback.print_exc()
        sys.exit(1)

if __name__ == '__main__':

    test()

当我执行上面的代码并说我要复制的文件不存在时,错误没有被捕获,代码也没有进入except部分。如何捕获system()命令生成的错误?

注意:以上system()命令只是一个示例。有多个这样的system()命令,每个命令彼此不同

1 个答案:

答案 0 :(得分:3)

system()命令在失败时不会抛出异常;它只会返回应用程序的退出状态代码。如果您希望在失败时抛出异常,请改用subprocess.check_call。 (并且,通常,使用subprocess module是优越的,因为它使您可以更好地控制调用以及重定向子流程的标准输入/输出的能力。

但是,请注意,如果您正在执行的大多数操作都是简单的文件系统操作,例如将文件从一个位置复制到另一个位置,那么就会有相同的Python函数。例如,shutil提供了将文件从一个位置复制到另一个位置的功能。在有Python函数来完成任务的地方,通常最好使用它们而不是调用子进程来执行它(特别是因为Python提供的方法可能能够更高效地执行它而不需要进程,并且Python对于跨平台的考虑,版本也会更加健壮。)