我现在有一个或多或少的工作示例,如下所示,可以在openshift中杀死一些pod。
现在已经停滞不前了。
myindx = out.find(key)
print out[myindx:-1].rstrip()
out
是oc get pod --all-namespaces ...
的输出,看起来像这样
-n namespace01 pod-name-9-xd45
-n namespace01 pod-name-9-xd67
-n namespace02 pod-name2-9-xd45
-n namespace02 pod-name2-9-rd45
out.find(key)
我现在找到了正确的行,我需要整行来调用oc delete $line
。
在perl中,我会将oc get pod --all-namespaces ...
的所有输出放入一个数组中并搜索数组中的每一行但是如何在python中执行此操作?
感谢您的帮助。
#!python
import StringIO
import sys
import re
import subprocess
import shlex
from collections import defaultdict
# Since you're keeping counts, we'll initialize this so that the values
# of the dictionary are `int`
myhash = defaultdict(lambda: 0)
if sys.argv[3] != "NodeReady":
sys.exit(0)
commandline = shlex.split("/bin/oc get pod --all-namespaces")
proc = subprocess.Popen(commandline,stdout=subprocess.PIPE)
out, err = proc.communicate()
buf = StringIO.StringIO(out)
for line in buf.readlines():
# print line
"""
Diese Projekte und pod Zeilen werden ignoriert
"""
if re.match('^NAMESPACE|.*-router|^logging|^default|.*infra-ipfailover|.*-(build|deploy)',line):
continue
linesplited = line.split()
prefix = re.split('(.*)-\d+-\w+$',linesplited[1])
#print linesplited[1]
#print prefix[1]
myhash[prefix[1]] += 1
commandline = shlex.split('/bin/oc get pod --all-namespaces -o template --template=\'{{range .items }} -n {{ .metadata.namespace }} {{.metadata.name}}\n{{end}}\'')
proc = subprocess.Popen(commandline,stdout=subprocess.PIPE)
out, err = proc.communicate()
#print out
buf = StringIO.StringIO(out)
#print buf
#for line in buf.readlines():
# print line
for key in myhash.keys():
print "<<<>>>"
# print myhash[key] % 2 , "\n"
print key,":",myhash[key]
if myhash[key] % 2 :
if myhash[key] > 1:
print "mod 2",key,":",myhash[key]
myindx = out.find(key)
print out[myindx].rstrip()
else:
print "not mod 2",key,":",myhash[key]
print out.find(key)
答案 0 :(得分:1)
我在黑暗中拍摄了一点,但我认为你的问题可以减少到以下几点。
在此行之后,out
应该包含您提到的所有输出。
out, err = proc.communicate()
out
可能看起来像这样:
-n namespace01 pod-name-9-xd45\n
-n namespace01 pod-name-9-xd67\n
-n namespace02 pod-name2-9-xd45\n
-n namespace02 pod-name2-9-rd45\n
不是将其推入StringIO
对象,而是将此字符串剪切为数组:
output_lines = [x.strip() for x in output.split('\n')]
然后output_lines
看起来像这样:
['-n namespace01 pod-name-9-xd45',
'-n namespace01 pod-name-9-xd67',
'-n namespace02 pod-name2-9-xd45',
'-n namespace02 pod-name2-9-rd45']
然后你想找到包含你的密钥的数组中的每个字符串。
if myhash[key] % 2 :
if myhash[key] > 1:
print "mod 2",key,":",myhash[key]
for ol in output_lines:
myindx = ol.find(key)
if myindx > -1:
print ol