“commands”何时优于“popen”子进程?

2024-04-27 19:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我没有接受过学校教育就进入了系统管理,所以有时我会遗漏对其他人来说最基本的信息。在

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

我目前的代码是:

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')

这是在运行,但没有给我一个输出到外壳。但我更重要的问题是,我是否使用了正确的命令来获得我喜欢的进程?我应该改用其中一个子程序命令吗?我试着和波本玩,但我不完全理解它,不能正确地使用它。在

我在跑步

^{pr2}$

但我知道毫无疑问你不应该这样做。Popen需要的参数比我给出的要多,比如文件位置和运行它的位置(Stdout或stderr)。但我很难让这些命令生效。会不会是这样的:

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

我到处都在研究,但这是一个被广泛使用的过程,我似乎正遭受着信息过剩而不是不足的痛苦。任何帮助都将不胜感激,我是新来的。在

先谢谢你的帮助。在


Tags: 命令信息参数进程stdoutit学校commands
3条回答

commands在Python2.6及更高版本中已被弃用,在Python3中已被删除。在新代码中可能没有更好的情况,即使您一直使用Python2.5或更早版本。在

来自the docs

Deprecated since version 2.6: The commands module has been removed in Python 3. Use the subprocess module instead.

要在单独的进程中运行man searchterm并在终端中显示结果,可以执行以下操作:

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

从单独进程获取数据的canonical方法是使用subprocess(不推荐使用commands

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

请注意,有些方便函数用于将字符串拆分为参数列表。最值得注意的是shlex.split,它将采用与shell相同的方式将字符串拆分为一个列表。(如果字符串中没有引用任何内容,str.split()也能正常工作)。在

相关问题 更多 >