Execution of a python script and save the output as a CSV file

2.2k Views Asked by At

I would like to save the output of a python script (sshClient.py) as a CSV file. Can you please assist me how to do that? Thanks in advance. The code and resultant output I'm sharing here for your better understanding.

import sys
import time
import select
import paramiko

host = '169.254.115.1'
i = 1

#
# Try to connect to the host.
# Retry a few times if it fails.
#
while True:
    print ('Trying to connect to %s (%i/3)' % (host, i))

    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(host, port=22, username='user', password='user')
        print ("Connected to %s" % host)
        break
    except paramiko.AuthenticationException:
        print ("Authentication failed when connecting to %s") % host
        sys.exit(1)
    except:
        print ("Could not SSH to %s, waiting for it to start" % host)
        i += 1
        time.sleep(2)

    # If we could not connect within time limit
    if i == 3:
        print ("Could not connect to %s. Giving up") % host
        sys.exit(1)

# Send the command (non-blocking)
stdin, stdout, stderr = ssh.exec_command("cd /opt/cohda/test; sudo ./runtest_iperf_tx.sh")

# Wait for the command to terminate
while not stdout.channel.exit_status_ready():
    # Only print data if there is data to read in the channel
    if stdout.channel.recv_ready():
        rl, wl, xl = select.select([stdout.channel], [], [], 0.0)
        if len(rl) > 0:
            # Print data from stdout
            print (stdout.channel.recv(1024)),
#
# Disconnect from the host
#
print ("Command done, closing SSH connection")
ssh.close()

The resultant output: Throughput Vs Time

1

There are 1 best solutions below

3
On

Not tested, but something to this effect should work if data is ascii...

# Wait for the command to terminate
csv_str = ""
while not stdout.channel.exit_status_ready():
    # Only print data if there is data to read in the channel
    if stdout.channel.recv_ready():
        rl, wl, xl = select.select([stdout.channel], [], [], 0.0)
        if len(rl) > 0:
            # Print data from stdout
            print (stdout.channel.recv(1024)),
            csv_str += str.split(str(stdout.channel.recv(1024)),",")
#
# Disconnect from the host
#
PathFileName = "/hard/path/filename.csv"
f = open(PathFileName,'a')
f.write(csv_str)
f.close()