什么时候'命令'更喜欢'popen'子流程?

我在没有学校教育的情况下进入系统管理学习,所以有时我会错过许多其他基本信息。

我试图在打印之前给我的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')

这是在跑,但没有给我一个输出到壳。 我的更重要的问题是,我是否使用正确的命令来获得我的首选过程? 我应该使用其中一个子进程命令吗? 我尝试过使用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.  

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

抢先感谢您的帮助。


从单独的进程获取数据的非常方法是使用子进程(命令已弃用)

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

请注意,有些便利函数用于将字符串拆分为参数列表。 最值得注意的是shlex.split,它将采用一个字符串并将其与shell一样分割成一个列表。 (如果字符串中没有引用任何内容,则str.split()适用)。


commands在Python 2.6和更高版本中已被弃用,并且已在Python 3中被删除。即使您使用Python 2.5或更早版本,也可能没有在新代码中更好的情况。


从文档:

自2.6版弃用:命令模块已在Python 3中删除。请改用子流程模块。

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

import subprocess
proc = subprocess.Popen('man searchterm'.split())
proc.communicate()
链接地址: http://www.djcxy.com/p/13479.html

上一篇: when is 'commands' preferable to 'popen' subprocess?

下一篇: Need to avoid subprocess deadlock without communicate