CPU输出为csv格式-python

CPU输出为csv格式-python,python,Python,我正在尝试以csv格式获取整个CPU输出。但它只打印csv输出中的最后一行。有人可以看看这个,并帮助我纠正下面的脚本 import paramiko import subprocess import csv myfile = open(r"file input path") txt = myfile.read() client = paramiko.SSHClient() target_host = txt un = 'root

我正在尝试以csv格式获取整个CPU输出。但它只打印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) 

当您以模式
“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()
文件时,所以在每一行之后关闭可以在有故障时保留磁盘上的前几行。

当您以
模式打开文件时(write)然后它删除前面的countent

所以您应该在循环之前只打开文件一次

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()
文件时-因此,在每行之后关闭可以在出现故障时保留磁盘上的前几行。

在循环之前打开文件:
打开(“cpuoutput.csv”,“w”,newline=”“)as f:用于标准输出中的行:
。当您在write
'w'
模式下打开它时,每次打开它时,它都会被截断。另外,如果要打印每一行,它应该在循环中,而不是在循环之后。打开循环之前的文件:
,并将Open(“cpuoutput.csv”,“w”,newline=“”)作为f:for-line-in-stdout:
。当您在write
'w'
模式下打开它时,每次打开它时,它都会被截断。另外,如果要打印每一行,它应该在循环中,而不是在循环之后。