我正在尝试使用Paramiko模块在CSV文件中保存运行的SSH命令的输出。但输出以错误的格式保存。例如每个字母在一个单独的列中,所有内容都显示在一行中。
获取命令并将其写入CSV的Python代码的一部分。
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)
print line.strip()
的输出格式如下:
Command Output
有人可以告诉我,我做错了吗?
答案 0 :(得分:0)
你的代码肯定会失去新的代码。
这应该做:
stdin, stdout, stderr = ssh.exec_command("lastlog")
with open('output.csv', 'wb') as f:
shutil.copyfileobj(stdout, f)
我不确定"单独一栏中的每一个字母" 。
答案 1 :(得分: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)