我想将用户和上次日志导出到csv文件,但我只从文件中获取连接的最后一行而不是所有ssh响应
import yaml
import os
import functools
import datetime
csv_file = open(filename,'w+')
csv_file.write("%s,%s,%s,%s\n" % ('name' , 'ssh_ec2user' , 'ssh_centosuser' , 'ssh_nginx_log'))
csv_file.flush()
for instance in running_instances:
if (instance.tags == None or instance.tags == ""): continue
for tag in instance.tags:
if 'Name' in tag['Key']:
name = tag['Value']
print(name)
instance_private_ip = (instance.private_ip_address)
print(instance_private_ip)
ssh_ec2user = os.system("ssh -t -t -i %s -n -o StrictHostKeyChecking=no ec2-user@%s 'sudo touch last.txt;sudo chmod 777 last.txt;sudo last > last.txt; sudo grep -v user last.txt |head -n3'" % (identity_file , instance_private_ip))
ssh_centosuser = os.system("ssh -t -t -i %s -n -o StrictHostKeyChecking=no centos@%s 'sudo touch last.txt;sudo chmod 777 last.txt;sudo last > last.txt; sudo grep -v centos last.txt |head -n3'" % (identity_file , instance_private_ip))
ssh_nginx_log = "test nginx"
print(ssh_ec2user,user, ssh_nginx_log)
csv_file.write("\'%s\',\'%s\',\'%s\',\'%s\'\n" %(name,ssh_ec2user,ssh_centosuser,ssh_nginx_log))csv_file.flush()
例如每行我需要回复:
用户pts / 0 172.21.0.114 1月25日星期四12:30 - 13:38(01:08)
用户pts / 0 172.21.2.130 1月17日星期三15:11 - 15:17(00:05)
用户pts / 0 172.21.2.130 Wed Jan 17 09:27 - 09:46(00:18)
连接到1.1.1.1关闭。
65280 0
测试nginx
并且在文件中只有一个recive: 65280 0
我如何输入所有anwser的同一行:
用户pts / 0 172.21.0.114 1月25日星期四12:30 - 13:38(01:08)
用户pts / 0 172.21.2.130 1月17日星期三15:11 - 15:17(00:05)
用户pts / 0 172.21.2.130 Wed Jan 17 09:27 - 09:46(00:18)
连接到1.1.1.1关闭。
65280 0
TNX
答案 0 :(得分:0)
使用csv库。
import csv
writer = csv.writer(csv_file)
writer.writerow(['name' , 'ssh_ec2user' , 'ssh_centosuser' , 'ssh_nginx_log'])
...
writer.writerow([name,ssh_ec2user,ssh_centosuser,ssh_nginx_log])
输出不会在同一行,但会被正确转义,这样如果用Excel或OpenCal打开它或类似的将会正确显示。
你也可以拥有','字符串中的字符,不会弄乱格式。