【发布时间】:2018-06-26 13:20:09
【问题描述】:
我试图设置一个环境变量,但由于访问被拒绝而失败,但是,try-except 块没有将此作为错误捕获。我可以自己捕获退出代码,然后检查退出代码是否不同于 0,但我希望有一种更 Pythonic 的方式。
这是我尝试过的执行:
try:
exit_code = subprocess.call(["SETX", "-m", "ENV_VAR", "Test"])
print 'exit_code: {}'.format(exit_code) # for debugging purposes
except Exception:
raise Exception("Could not set environment variable")
结果如下:
ERROR: Access to the registry path is denied.
exit_code: 1
Process finished with exit code 0
如您所见,从 subprocess.call 返回的退出代码为 1,表示失败,但是,整个 Python 进程以退出代码 0 退出,并且从未调用过“引发异常”。
最好的解决方法是什么?
【问题讨论】:
-
值得一提:我知道使用“except Exception”是不好的做法,但这只是显示我面临的问题的一个例子,因为我无法确定错误的确切类型/在这种情况下从 subprocess.call 引发的异常。
-
您应该改用 subprocess.check_call 或 subprocess.check_output 并处理 CalledProcessError 异常。链接:docs.python.org/2/library/subprocess.html#
-
@AlexK。完美,正是我需要的。非常感谢!
标签: python python-2.7 subprocess method-call