背景:我对Python很陌生,但对Perl有相当的经验。我正在尝试在sysadmin活动区域中多样化我的脚本组合。
我正试图通过python脚本与外部进程进行动态通信。你知道吗
我想做的是:
我希望这会带来:
(spawn process) /usr/local/bin/cli
-> show listofobjects
<- (read back list of objects internally)
-> (one by one, write a line to the cli for each of the list of objects)
-> get objectname modifiedtime
<- (print response from above command)
以下是我目前掌握的代码:
import shlex, subprocess, re
clicmd = "/usr/local/bin/cli -s 10.1.213.226 -n Administrator -p password"
cliargs = shlex.split(clicmd)
cliproc = subprocess.Popen(cliargs,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
tmpclicmd = "LIST objects OUTPUT csv NAME"
cliret = cliproc.communicate(input=tmpclicmd)[0]
regex = re.compile('^\".*')
for line in cliret.split('\n'):
if regex.match(line):
procline = line.replace('"','')
if 'NAME' not in procline:
clideets = subprocess.Popen(cliargs,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
clideetscmd = 'modify objects ' + procline
clideets.communicate(input=clideetscmd)
clideetscmd = 'list objectdetails'
clideetsresp = clideets.communicate(input=clideetscmd)[0]
print clideetsresp;
我可能完全错了。我是不是每走一步都要产生一个新的波本?我怎么能做得更好呢?(另一个模块等)。在一天结束时,我不能让cli关闭在我身上,Popen似乎在每一步之后都会这样做。你知道吗
提前谢谢!你知道吗
没有必要为每个交互启动一个新进程(使用} 向进程发送数据时,您会这样做,因为正如文档所述:
Popen
)。但是,当您使用^{相反,只需写入
cliproc.stdin
并从cliproc.stdout
读取:这个过程是这样保持的。
我不知道你为什么在这里使用
shlex
模块:内置的^{} 方法很好:
或者你可以自己写下结果列表:
这里不需要分号:
相关问题 更多 >
编程相关推荐