2017-03-21 1 views
0

誰かを助けてください。私は以下の変数を出力し、いくつかの情報を読み込んでデータベースに格納します。私は1行と見て、私は行に分割し、行ごとに印刷したいと思います。コマンドのシェルをpython 2.6で行単位でチェックアウトし、条件付きで行をチェックする方法

OUTPUT

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                      Mar9 
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 
+0

最初に出力の行を繰り返し、内側の 'for'では各行の文字を繰り返します。内側の' for'ループを削除するだけですか? – UnholySheep

+0

はい、それは働いていますが、それは1行になりますが、私は出力からわからない特定の詳細を読むことができません – SLS

答えて

1

私はカフカを持っていけないので、私はにサンプルとしてサンプル出力文字列を使用していましたプログラムを実行し、また引数を削除しました。

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                      Mar9 
     tmi_-transactionalemail_-dbo_-topic""" 
     return sampleOutput 


    def mirrors_to_db(): 
     for line in Kafka_mirror().split('\n'): 
      print line 

    mirrors_to_db() 
+0

答えをありがとう、しかし私は分割を使用すると、 トレースバック(最新の呼び出しの最後):中 ファイル "./kafka_mirror.py"、38行、で mirrors_to_db( 'テスト'、 'frun5934') ファイル "./kafka_mirror.py"、16行目、 ( "\ n"): AttributeError: 'tuple'オブジェクトに 'split'属性がありません – SLS

+0

実際にはsubprocess.Popen( "").communicate()を使用すると、 、(stdout、stderr)の形式でタプルを与えます。したがって、.communicate()の出力を "result、exe_err = output.communicate()"のように2つの変数に割り当て、すべてのコマンド出力を含むresult変数を使用します。リンクを参照してください:https://pymotw.com/2/subprocess/ –

+0

おかげでBuddy、それは問題のように思えます、今私は1つずつ印刷することができます。 – SLS

1

私が最初の答えに

line 16, in mirrors_to_db for line in Kafka_mirror(envr,server).split('\n'): AttributeError: 'tuple' object has no attribute

をあなたのコメントを参照すると思いますこれは明らかにあなたのsubprocess.Popen関数がリストとして出力を返すことを伝えます。 だからループのための単一で十分です:

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 

デフmirrors_to_db(envr、サーバー):これはあなたのために働く必要があります

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つの値を出力すべきです。

+0

はい、これは仕事ですが、私はそれが私がその行にfrun5636を見つけようとすると、それが見つかった場合の条件を与えるとしようとすると、そのようなトピック名サーバー名PIDなどその行といくつかの事を少なく印刷します。それは見つかったと言い、それ以外の部分は動作しません – SLS

+0

あなたがコードしようとしているコードを正確に共有できますか? –

+1

本当に私は、出力に情報を取得する必要がありますサポートのためにverryありがとう、ミラー名やPIDなどの変数に格納する必要がありますsqlite後。 – SLS

関連する問題