以下是代码:
from subprocess import Popen, PIPE
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p2 = Popen(["grep", "net.ipv4.icmp_echo_ignore_all"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
print output
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p3 = Popen(["grep", "net.ipv4.icmp_echo_ignore_broadcasts"], stdin=p1.stdout, stdout=PIPE)
output1 = p3.communicate()[0]
print output1
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p4 = Popen(["grep", "net.ipv4.ip_forward"], stdin=p1.stdout, stdout=PIPE)
output2 = p4.communicate()[0]
print output2
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p5 = Popen(["grep", "net.ipv4.tcp_syncookies"], stdin=p1.stdout, stdout=PIPE)
output3 = p5.communicate()[0]
print output3
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p6 = Popen(["grep", "net.ipv4.conf.all.rp_filter"], stdin=p1.stdout, stdout=PIPE)
output4 = p6.communicate()[0]
print output4
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p7 = Popen(["grep", "net.ipv4.conf.all.log.martians"], stdin=p1.stdout, stdout=PIPE)
output5 = p7.communicate()[0]
print output5
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p8 = Popen(["grep", "net.ipv4.conf.all.secure_redirects"], stdin=p1.stdout, stdout=PIPE)
output6 = p8.communicate()[0]
print output6
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p9 = Popen(["grep", "net.ipv4.conf.all.send_redirects"], stdin=p1.stdout, stdout=PIPE)
output7 = p9.communicate()[0]
print output7
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p10 = Popen(["grep", "net.ipv4.conf.all.accept_source_route"], stdin=p1.stdout, stdout=PIPE)
output8 = p10.communicate()[0]
print output8
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p11 = Popen(["grep", "net.ipv4.conf.all.accept_redirects"], stdin=p1.stdout, stdout=PIPE)
output9 = p11.communicate()[0]
print output9
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p12 = Popen(["grep", "net.ipv4.tcp_max_syn_backlog"], stdin=p1.stdout, stdout=PIPE)
output10 = p12.communicate()[0]
print output10
current_kernel_para = dict() #new dictionary to store the above kernel parameters
以上程序的输出是:
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.all.secure_redirects = 1
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.tcp_max_syn_backlog = 512
我想将这些值存储在字典“current_kernel_para”中。所需的输出是: {net.ipv4.icmp_echo_ignore_all:0,net.ipv4.icmp_echo_ignore_broadcasts:1}等。
请帮忙。提前谢谢。
答案 0 :(得分:3)
你可以将字符串拆分为“=”,并使用第一个作为键,第二个标记作为值。
答案 1 :(得分:0)
将输出拆分为'='
x = output.split(' = ')
这会给:
['net.ipv4.conf.all.send_redirects', '1']
然后,您可以将所有这些列表一起添加并使用:
x = ['net.ipv4.icmp_echo_ignore_all', '0', 'net.ipv4.conf.all.send_redirects', '1'...]
dict_x = dict(x[i:i+2] for i in range(0, len(x), 2))
答案 2 :(得分:0)
current_kernel_para = {}
paras = ["net.ipv4.icmp_echo_ignore_all",
"net.ipv4.icmp_echo_ignore_broadcasts", #...
]
for para in paras:
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p2 = Popen(["grep", para], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
output.strip()
k, v = map(strip, output.split('='))
current_kernel_para[k] = v
答案 3 :(得分:0)
不是将每个输出分配给新变量,而是将其作为列表收集。请记住删除尾随\n
outputs = []
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p2 = Popen(["grep", "net.ipv4.icmp_echo_ignore_all"], stdin=p1.stdout, stdout=PIPE)
outputs.append(p2.communicate()[0].strip('\n'))
p1 = Popen(["sysctl", "-a"], stdout=PIPE)
p3 = Popen(["grep", "net.ipv4.icmp_echo_ignore_broadcasts"], stdin=p1.stdout, stdout=PIPE)
outputs.append(p3.communicate()[0].strip('\n'))
这给出了
>>> outputs
['net.ipv4.icmp_echo_ignore_all = 0', 'net.ipv4.icmp_echo_ignore_broadcasts = 1']
然后,您可以在=
列表中拆分列表中的每个字符串,并将结果收集为list of lists
。
outputs_list=[x.split('=') for x in outputs]
给出
>>> outputs_list
[['net.ipv4.icmp_echo_ignore_all ', ' 0'], ['net.ipv4.icmp_echo_ignore_broadcasts ', ' 1']]
很好,但它有前导/尾随空格。让我们把那些剥离出来
outputs_list=[[y.strip() for y in x.split('=')] for x in outputs]
这给出了
>>> outputs_list
[['net.ipv4.icmp_echo_ignore_all', '0'], ['net.ipv4.icmp_echo_ignore_broadcasts', '1']]
将dict()
构造函数也传递给它以形成字典
>>> dict(outputs_list)
{'net.ipv4.icmp_echo_ignore_all': '0', 'net.ipv4.icmp_echo_ignore_broadcasts': '1'}