【问题标题】:Run Python system commands on solaris在 solaris 上运行 Python 系统命令
【发布时间】:2012-03-07 06:59:50
【问题描述】:

我在 solaris 环境中运行 python 命令。我无法对其执行 subprocess.call,因为它在 execute_child“[Errno 2] 没有这样的文件或目录”中给我一个错误。我尝试了使用 popen2/3/4 的替代方法,但它引发错误“DeprecationWarning:不推荐使用 popen2 模块。使用 subprocess 模块。”由于某些限制,我不想使用 os.system。还有其他方法可以使这项工作吗? 任何帮助将不胜感激。

【问题讨论】:

    标签: python solaris subprocess popen


    【解决方案1】:

    你试过subprocess.popen()吗?很简单:

    output, error = subprocess.popen(your_command, shell=True, 
                    stdout=subprocess.PIPE, stderr=subprocess.PIPE);
    

    replacespopen2(),确实已弃用:

    os.popen2(cmd[, mode[, bufsize]])

    2.6 版后已弃用:此功能已过时。使用 子流程模块。特别检查替换旧功能 子流程模块部分。

    关于No such file or directory错误,尝试使用绝对路径。

    【讨论】:

      【解决方案2】:

      下面是我编写的 python 程序中的一些代码,用于管理 Solaris 10 系统上的 Solaris Volume Manager (SVM) 卷。它使用前面描述的相同方法,但添加了 p.communicate()。请注意,在这种情况下,stderr 输出被重定向到标准输出,因为在这种情况下不需要区分错误消息和正常输出。

      # Constants
      DATADIR="/etc/lvm"
      METASTAT_CMD="/usr/sbin/metastat"
      MD_CF = DATADIR + "/md.cf"
      
      def check_svm_volume_exists():
          # Check to see if any SVM volume(s) exist or not. If none exist, exit.
          syscmd = " ".join([METASTAT_CMD, "-p", ">", MD_CF])
          p = subprocess.Popen(syscmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
          out_data, err_data = p.communicate()
      
          if out_data == "":
              return out_data 
          else:
              print("No Solaris Volume Manager volume(s) appear to be configured. Exiting.")
              sys.exit(1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-05
        相关资源
        最近更新 更多