2017-12-15 23 views
0

Paramikoモジュールを使用して実行されるSSHコマンドの出力をCSVファイルに保存しようとしています。しかし、出力は間違った形式で保存されます。例えば別の列のすべての文字とすべてが1行に表示されます。Python - CSVにSSHコマンド出力を保存

コマンドを取得してCSVに書き込むPythonコードの一部です。 print line.strip()

stdin,stdout,stderr = ssh.exec_command("lastlog") 

temp = "" 

for line in stdout.readlines(): 
     print line.strip() 
     temp = temp + line 


# Open a file and write the output to it 
with open('output.csv', 'wb') as f: 
      writer = csv.writer(f) 
      writer.writerow(temp) 

出力は次の形式になります。 Command Output

は、誰かが私が間違っているのものを私にしてください教えてください。

答えて

0

これは私が得た最高のものです。これを行うより良い方法があるかもしれませんが、少なくともこれが目的を解決します。

stdin, stdout, stderr = ssh.exec_command("lastlog | awk \'{if (NF==4)print$1\",,,\"$2\" \"$3\" \"$4; if (NF==8) print $1\",\"$2\",,\"$3\" \"$4\" \"$5\"\"$6\" \"$7\" \"$8;if (NF==9) print $1\",\"$2\",\"$3\",\"$4\" \"$5""$6\" \"$7\" \"$8\" \"$9}\'") 
log_output = stdout.readlines() 
log_output_clean = [i.strip("\n").split(",") for i in log_output[1:]] # First row did not parse well,so ignored it 
log_output_clean.insert(0, ['Username', 'Port', 'From', 'Latest']) # Adding header row 
with open('log_output.csv', 'w') as output_fn: 
    wr = csv.writer(output_fn) 
    wr.writerows(log_output_clean) 
+0

ご入力いただきありがとうございます。あなたのコードは次のようなエラーを出します:stdin、stdout、stderr = ssh.exec_command( "lastlog | awk \ '{if(NF == 4) ^ SyntaxError:文字列リテラルをスキャン中のEOLしかし、それはcsvのヘッダーを印刷しただけです。 – markford

+0

スペースを削除して答えを編集しました。パイプコマンドは1行です。その構文エラーがあるのはなぜですか? – beegee

+0

ありがとうございましたあなたの答え :) – markford

0

あなたのコードは間違いなく新しい行を失います。

これは、実行する必要があります。

stdin, stdout, stderr = ssh.exec_command("lastlog") 

with open('output.csv', 'wb') as f: 
    shutil.copyfileobj(stdout, f) 

私は"別の列内のすべての文字" についてはよく分かりません。

+0

変更を提供いただきありがとうございます。ただし、すべてのデータを1列(列A)に保存するようになりました。ヘッダーを異なる列に保存するように変更するにはどうすればよいですか?例えばユーザー名は列A、ポートBなど – markford

関連する問題