#python
#python
Вопрос:
Я пытаюсь получить весь вывод ЦП в формате csv. Но он печатает только последнюю строку в выводе csv. Может ли кто-нибудь разобраться в этом и помочь мне исправить приведенный ниже сценарий.
import paramiko
import subprocess
import csv
myfile = open(r"file input path")
txt = myfile.read()
client = paramiko.SSHClient()
target_host = txt
un = 'root'
pwd = 'xxx'
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=target_host,username=un,password=pwd)
stdin, stdout, stderr = client.exec_command('ps -aux')
for line in stdout:
with open("cpuoutput.csv", "w", newline="") as f:
f.write(line)
print (line)
Комментарии:
1. Откройте файл перед циклом:
with open("cpuoutput.csv", "w", newline="") as f: for line in stdout:
. Когда вы открываете его в режиме записи'w'
, он усекается каждый раз, когда вы его открываете. Кроме того, если вы хотите печатать каждую строку, она должна быть в цикле, а не после него.
Ответ №1:
Когда вы открываете файл в режиме "w"
(запись), он удаляет предыдущий счетчик
таким образом, вы должны открывать файл только один раз — перед циклом
with open("cpuoutput.csv", "w", newline="") as f:
for line in stdout:
f.write(line)
print (line)
или вы должны использовать режим "a"
(добавить), чтобы сохранить предыдущее содержимое
for line in stdout:
with open("cpuoutput.csv", "a", newline="") as f:
f.write(line)
print (line)
Первый метод должен быть быстрее для файлов большего размера, потому что ему не нужно закрывать и повторно открывать файл для каждой строки.
Второй метод может быть безопаснее, когда скрипт может быть раздавлен, потому что часто система сохраняет данные на диске не в Python, write()
а в файле Python close()
, поэтому закрытие после каждой строки может сохранить предыдущие строки на диске, когда есть cruch.