Вывод ЦП в формат csv — python

#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.