2017-12-15 29 views
0

CSV 파일의 Paramiko 모듈을 사용하여 실행되는 SSH 명령의 출력을 저장하려고합니다. 그러나 출력이 잘못된 형식으로 저장됩니다. 예 : 별도의 열에있는 모든 문자는 모든 행이 1 행에 표시됩니다.파이썬 - CSV에 SSH 명령 출력 저장

명령을 받아서 CSV에 쓰는 파이썬 코드의 일부입니다. 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

입력 해 주셔서 감사합니다. ("lastlog | awk \ '{if (NF == 4) ^ SyntaxError : 문자열 리터럴을 검색하는 동안 EOL 대신" "" "을 사용하려고했습니다. 하지만 하나의 "단지 .csv에 헤더를 인쇄했습니다. – markford

+0

공백을 제거하고 대답을 편집했습니다. 파이프 명령은 단지 한 줄입니다. 그 구문 오류가있는 것 같습니다. – 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 열)에 저장합니다. 다른 열에 헤더를 저장하도록 어떻게 변경합니까? 예 : 사용자 이름은 B 열의 A 열, A 열에 있어야합니다. – markford