如何将 shell 逐行放入 python 2.6 并有条件地检查行
How get shell out put in python 2.6 as line by line and conditionally check lines
你能帮帮我吗,我已经得到下面的变量输出并读取他们的一些信息并将其存储到数据库中。好像是单行,我想分行逐行打印。
命令的输出
kafka-mirror Running (9) on frun4316 TIME PID Num.Streams
=======================================================================================================================================================
billing_-mainframe_-db2prod_-topic Mar08 565
snap_-arep_-b2bowner_-topic,snap_-report_-b2bowner_-topic,snap_-arep_-isnapownera_-topic,snap_-report_-isnapownera_-topic Mar08 1024
meds_-mlinterview_-hiss_-topic,meds_-mlinterview_-dbo_-topic Mar08 1902
insite_-c1reppd_-insiteownera_-topic,insite_-cireprod_-insiteowner_-topic Mar15 19386
atlas_-clmprgg_-geico_claimcenter_-topic Mar15 22222 2
ecams_-ecamsdatastore_-ecamsmain_-topic Mar09 28770
ies_-ies_-dbo_-topic Mar08 31651
ims_-ias_stage_-dbo_-topic Mar08 32109
tmi_-transactionalemail_-dbo_-topic Mar08 32567
代码
def Kafka_mirror(envr,server):
out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE, shell=True).communicate()
return out
def mirrors_to_db(envr,server):
for line in Kafka_mirror(envr,server):
for i in line:
print(i)
脚本输出
k
a
f
k
a
-
m
i
r
r
o
r
我没有Kafka,所以我使用示例输出字符串作为示例来执行程序,并且我已经删除了参数。
def Kafka_mirror():
#out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-
#list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE,
#shell=True).communicate()
sampleOutput = """kafka-mirror Running (9) on frun4316
TIME PID Num.Streams
================================================================================ =======================================================================
billing_-mainframe_-db2prod_-topic
Mar08 565
snap_-arep_-b2bowner_-topic,snap_-report_-b2bowner_-topic,snap_-arep_-isnapownera_-topic,snap_-report_-isnapownera_-topic Mar08 1024
meds_-mlinterview_-hiss_-topic,meds_-mlinterview_-dbo_-topic Mar08 1902
insite_-c1reppd_-insiteownera_-topic,insite_-cireprod_-insiteowner_-topic Mar15 19386
atlas_-clmprgg_-geico_claimcenter_-topic Mar15 22222 2
ecams_-ecamsdatastore_-ecamsmain_-topic Mar09 28770
ies_-ies_-dbo_-topic Mar08 31651
ims_-ias_stage_-dbo_-topic Mar08 32109
tmi_-transactionalemail_-dbo_-topic"""
return sampleOutput
def mirrors_to_db():
for line in Kafka_mirror().split('\n'):
print line
mirrors_to_db()
我会参考您对第一个答案的评论
line 16, in mirrors_to_db for line in Kafka_mirror(envr,server).split('\n'): AttributeError: 'tuple' object has no attribute
这清楚地表明您的 subprocess.Popen 函数 returns 输出为列表。
所以一个 for 循环就足够了:
def Kafka_mirror(envr,server):
out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE, shell=True).communicate()
return out
def mirrors_to_db(envr,server):
for line in Kafka_mirror(envr,server):
print line
这应该适合你。
Update:
import re
def Kafka_mirror(envr,server):
out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE, shell=True).communicate()
return out
def mirrors_to_db(envr,
for line in Kafka_mirror(envr,server):
temp_list = re.split(r'\t+', line)
print temp_list[0]
print temp_list[1]
print temp_list[2]
print temp_list[3]
此代码应打印命令输出中出现的所有 4 个值。
你能帮帮我吗,我已经得到下面的变量输出并读取他们的一些信息并将其存储到数据库中。好像是单行,我想分行逐行打印。
命令的输出
kafka-mirror Running (9) on frun4316 TIME PID Num.Streams
=======================================================================================================================================================
billing_-mainframe_-db2prod_-topic Mar08 565
snap_-arep_-b2bowner_-topic,snap_-report_-b2bowner_-topic,snap_-arep_-isnapownera_-topic,snap_-report_-isnapownera_-topic Mar08 1024
meds_-mlinterview_-hiss_-topic,meds_-mlinterview_-dbo_-topic Mar08 1902
insite_-c1reppd_-insiteownera_-topic,insite_-cireprod_-insiteowner_-topic Mar15 19386
atlas_-clmprgg_-geico_claimcenter_-topic Mar15 22222 2
ecams_-ecamsdatastore_-ecamsmain_-topic Mar09 28770
ies_-ies_-dbo_-topic Mar08 31651
ims_-ias_stage_-dbo_-topic Mar08 32109
tmi_-transactionalemail_-dbo_-topic Mar08 32567
代码
def Kafka_mirror(envr,server):
out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE, shell=True).communicate()
return out
def mirrors_to_db(envr,server):
for line in Kafka_mirror(envr,server):
for i in line:
print(i)
脚本输出
k
a
f
k
a
-
m
i
r
r
o
r
我没有Kafka,所以我使用示例输出字符串作为示例来执行程序,并且我已经删除了参数。
def Kafka_mirror():
#out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-
#list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE,
#shell=True).communicate()
sampleOutput = """kafka-mirror Running (9) on frun4316
TIME PID Num.Streams
================================================================================ =======================================================================
billing_-mainframe_-db2prod_-topic
Mar08 565
snap_-arep_-b2bowner_-topic,snap_-report_-b2bowner_-topic,snap_-arep_-isnapownera_-topic,snap_-report_-isnapownera_-topic Mar08 1024
meds_-mlinterview_-hiss_-topic,meds_-mlinterview_-dbo_-topic Mar08 1902
insite_-c1reppd_-insiteownera_-topic,insite_-cireprod_-insiteowner_-topic Mar15 19386
atlas_-clmprgg_-geico_claimcenter_-topic Mar15 22222 2
ecams_-ecamsdatastore_-ecamsmain_-topic Mar09 28770
ies_-ies_-dbo_-topic Mar08 31651
ims_-ias_stage_-dbo_-topic Mar08 32109
tmi_-transactionalemail_-dbo_-topic"""
return sampleOutput
def mirrors_to_db():
for line in Kafka_mirror().split('\n'):
print line
mirrors_to_db()
我会参考您对第一个答案的评论
line 16, in mirrors_to_db for line in Kafka_mirror(envr,server).split('\n'): AttributeError: 'tuple' object has no attribute
这清楚地表明您的 subprocess.Popen 函数 returns 输出为列表。 所以一个 for 循环就足够了:
def Kafka_mirror(envr,server):
out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE, shell=True).communicate()
return out
def mirrors_to_db(envr,server):
for line in Kafka_mirror(envr,server):
print line
这应该适合你。
Update:
import re
def Kafka_mirror(envr,server):
out = subprocess.Popen("/dsapps/admin/edp/scripts/edp-kafka-mirror-list all -e %s -h %s" % (envr,server), stdout=subprocess.PIPE, shell=True).communicate()
return out
def mirrors_to_db(envr,
for line in Kafka_mirror(envr,server):
temp_list = re.split(r'\t+', line)
print temp_list[0]
print temp_list[1]
print temp_list[2]
print temp_list[3]
此代码应打印命令输出中出现的所有 4 个值。