什么时候'命令'更喜欢'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