【问题标题】:How to handle unsupported system commands in Python?如何处理 Python 中不支持的系统命令?
【发布时间】:2015-03-22 18:23:55
【问题描述】:

我想问一下是否有任何解决方案来处理 Python 中不支持的系统命令。例如:

import os
os.system("svn")

在这段代码中,我尝试使用 svn 命令,但出现错误:

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

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

【问题讨论】:

  • 您可能想使用subprocess 而不是 os.system => subprocess.call("svn")。您可以通过调用函数返回的状态从操作系统中捕获错误。

标签: python operating-system command system


【解决方案1】:

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

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

except OSError:
    print 'an error occurred'

【讨论】:

    【解决方案2】:

    我认为 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] 没有这样的文件或目录

    【讨论】:

      【解决方案3】:

      使用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 等一样已被弃用。您应该始终使用 subprocess 模块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 2014-07-31
        相关资源
        最近更新 更多