4

我在没有上过学的情况下学习系统管理,所以有时我错过了许多其他人的基本信息。

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

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

先发制人地感谢任何帮助。

4

3 回答 3

3

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

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

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

于 2012-07-27T19:48:30.403 回答
0

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

于 2012-07-27T19:47:23.387 回答
0

文档

2.6 版后已弃用:命令模块已在 Python 3 中删除。请改用 subprocess 模块。

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

import subprocess
proc = subprocess.Popen('man searchterm'.split())
proc.communicate()
于 2012-07-27T19:48:33.550 回答