如何在Python中处理不受支持的系统命令?

时间:2015-03-22 18:23:55

标签: python operating-system command system

我想询问是否有任何解决方案来处理Python中不支持的系统命令。 E.g:

import os
os.system("svn")

在这段代码中我尝试使用svn命令,我收到一个错误:

"svn" is not recognized as an internal or external comand...

很明显,因为我没有安装svn,这就是为什么我有这个错误等等。问题不是关于“svn”,而是一般命令,这是操作系统不支持的。是否有可能在Python中处理此类事件,如果出现这种情况,系统将不会支持此命令。

3 个答案:

答案 0 :(得分:1)

os.system完成后返回许多不同的代码,但subprocess.call可以被捕获。

try:
    subprocess.call(['svn'])

except OSError:
    print 'an error occurred'

答案 1 :(得分:0)

我认为不推荐使用os.system,请参阅此页面以了解子进程:https://docs.python.org/2/library/subprocess.html#replacing-older-functions-with-the-subprocess-module

使用以下代码:

import subprocess
import sys
try:
    retcode = subprocess.call("svn")
    if retcode < 0:
        print >>sys.stderr, "Child was terminated by signal", -retcode
    else:
        print >>sys.stderr, "Child returned", retcode
except OSError as e:
    print >>sys.stderr, "Execution failed:", e

你得到错误:

执行失败:[Errno 2]没有这样的文件或目录

答案 2 :(得分:0)

使用subprocess.check_call,抓住CalledProcessErrorFileNotFoundError

from subprocess import check_call, CalledProcessError

try:
    check_call(["svn"])
except CalledProcessError as e:
    print("There was an error calling {}".format(e.cmd))
except FileNotFoundError as e:
    print("Invalid command")

如果命令返回非零退出状态,它也会引发错误。

os.system命令与os.popen等一样被折旧。你应该总是使用子进程模块。