【问题标题】:when is 'commands' preferable to 'popen' subprocess?什么时候“命令”比“打开”子进程更可取?
【发布时间】:2012-07-26 12:46:31
【问题描述】:

我在没有受过教育的情况下学习系统管理,所以有时我会错过对许多其他人来说是基本信息的东西。

我试图在打印之前给我的 stdout 行另一个参数,但我不确定我应该使用哪个进程,如果我应该使用子进程的命令,我有点模糊。

我当前的代码是:

f = open('filelist', 'r')
searchterm = f.readline()
f.close()|
#takes line from a separate file and gives it definition so that it may be callable.

import commands
commands.getoutput('print man searchterm')

这正在运行,但没有给我输出到 shell。不过,我更重要的问题是,我是否使用正确的命令来获得我喜欢的过程?我应该改用其中一个子进程命令吗?我试过玩 popen,但我对它的理解不够充分,无法正确使用它。

也就是说,我在跑步

subprocess.Popen('print man searchterm') 

但毫无疑问,我知道这不是你应该运行它的方式。 Popen 需要的参数比我给出的要多,比如文件位置和运行位置(Stdout 或 stderr)。但是我在使这些命令起作用时遇到了麻烦。会不会是这样的:

subprocess.Popen(pipe=stdout 'man' 'searchterm')
#am unsure how to give the program my arguments here.  

我一直在到处研究,但这是一个如此广泛使用的过程,我似乎正在遭受信息过剩而不是信息不足的困扰。任何帮助将不胜感激,我很新。

感谢您的任何帮助。

【问题讨论】:

  • commands 模块已弃用,取而代之的是 subprocess(它甚至在 python3.x 中都不存在)。所以,你可能应该使用subprocess
  • tutorial 提供了使用subprocess 的大量示例。

标签: python subprocess popen


【解决方案1】:

从单独进程获取数据的规范方法是使用subprocesscommands 已弃用)

import subprocess
p = subprocess.Popen(['print','man','searchitem'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdoutdata, stderrdata = p.communicate()

请注意,存在一些用于将字符串拆分为参数列表的便捷函数。最值得注意的是shlex.split,它将接受一个字符串并将其拆分为一个列表,就像shell一样。 (如果字符串中没有引用任何内容,str.split() 也可以正常工作)。

【讨论】:

    【解决方案2】:

    commands 在 Python 2.6 及更高版本中已被弃用,并已在 Python 3 中被删除。即使您坚持使用 Python 2.5 或更早版本,在新代码中也可能没有更好的选择。

    【讨论】:

      【解决方案3】:

      来自the docs

      2.6 版后已弃用:命令模块已在 Python 3. 改用 subprocess 模块。

      要在单独的进程中运行man searchterm 并在终端中显示结果,您可以这样做:

      import subprocess
      proc = subprocess.Popen('man searchterm'.split())
      proc.communicate()
      

      【讨论】:

      • 我知道上面这两个例子在做同样的事情。为什么这个需要我拆分字符串?
      • 啊,没关系。 Mgwilson 已经涵盖了这一点。非常感谢大家的帮助。
      • @Claem -- "man searchterm".split()["man", "searchterm"] 相同
      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2014-02-12
      • 2012-02-24
      • 2012-10-22
      • 2017-08-04
      相关资源
      最近更新 更多