我在没有上学的情况下学习系统管理,所以有时我会错过许多其他人的基本信息。
我试图在打印之前给我的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.
我一直在研究各地,但它是一个如此广泛使用的过程,我似乎正在遭受过多的信息而不是不够。任何帮助将不胜感激,我很新。
先发制人,谢谢您的帮助。
答案 0 :(得分:3)
从单独的流程获取数据的通用方法是使用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()
也可以正常工作。)
答案 1 :(得分:0)
commands
在Python 2.6及更高版本中已被弃用,并且已在Python 3中删除。在新代码中,即使您遇到Python 2.5或更早版本,也可能没有这种情况更可取。
答案 2 :(得分:0)
来自the docs:
从2.6版开始不推荐使用:已删除命令模块 Python 3.改为使用子进程模块。
要在单独的流程中运行man searchterm
并在终端中显示结果,您可以这样做:
import subprocess
proc = subprocess.Popen('man searchterm'.split())
proc.communicate()