我有一个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()
命令,每个命令彼此不同
答案 0 :(得分:3)
system()
命令在失败时不会抛出异常;它只会返回应用程序的退出状态代码。如果您希望在失败时抛出异常,请改用subprocess.check_call。 (并且,通常,使用subprocess module是优越的,因为它使您可以更好地控制调用以及重定向子流程的标准输入/输出的能力。
但是,请注意,如果您正在执行的大多数操作都是简单的文件系统操作,例如将文件从一个位置复制到另一个位置,那么就会有相同的Python函数。例如,shutil提供了将文件从一个位置复制到另一个位置的功能。在有Python函数来完成任务的地方,通常最好使用它们而不是调用子进程来执行它(特别是因为Python提供的方法可能能够更高效地执行它而不需要进程,并且Python对于跨平台的考虑,版本也会更加健壮。)