Our first Paramiko program
Our first program will use the same general structure as the Pexpect program we have put together. We will loop over a list of devices and commands while using Paramiko instead of Pexpect. This will give us a good compare and contrast of the differences between Paramiko and Pexpect.
If you have not done so already, you can download the code, chapter5_3.py, from the book's GitHub repository, https://github.com/PacktPublishing/Python-Network-Programming. I will list the notable differences here:
devices = {'iosv-1': {'ip': '172.16.1.20'}, 'iosv-2': {'ip': '172.16.1.21'}}
We no longer need to match the device prompt using Paramiko; therefore, the device dictionary can be simplified:
commands = ['show version', 'show run']
There is no sendline equivalent in Paramiko; instead, we manually include the newline break in each of the commands:
def clear_buffer(connection):
if connection.recv_ready():
return connection.recv(max_buffer)
We include a new method to clear the buffer for sending commands, such as terminal length 0 or enable, because we do not need the output for those commands. We simply want to clear the buffer and get to the execution prompt. This function will later be used in the loop, such as in line 25 of the script:
output = clear_buffer(new_connection)
The rest of the program should be pretty self-explanatory, similar to what we have seen in this chapter. The last thing I would like to point out is that since this is an interactive program, we place some buffer and wait for the command to be finished on the remote device before retrieving the output:
time.sleep(2)
After we clear the buffer, during the time between the execution of commands, we will wait two seconds. This will give the device adequate time to respond if it is busy.