- Mastering Python Networking
- Eric Chou
- 251字
- 2021-07-02 21:42:36
Putting things together for Pexpect
As the final step, let's put everything you learned so far for Pexpect into a script. Putting the code in a script makes it easier to use it in a production environment as well as share the code with your colleagues.
You can download the script from the book GitHub repository, https://github.com/PacktPublishing/Mastering-Python-Networking as well as look at the output generated from the script as a result of the commands.
#!/usr/bin/python3
import getpass
from pexpect import pxssh
devices = {'iosv-1': {'prompt': 'iosv-1#', 'ip': '172.16.1.20'},
'iosv-2': {'prompt': 'iosv-2#', 'ip': '172.16.1.21'}}
commands = ['term length 0', 'show version', 'show run']
username = input('Username: ')
password = getpass.getpass('Password: ')
# Starts the loop for devices
for device in devices.keys():
outputFileName = device + '_output.txt'
device_prompt = devices[device]['prompt']
child = pxssh.pxssh()
child.login(devices[device]['ip'], username.strip(), password.strip(), auto_promp t_reset=False)
# Starts the loop for commands and write to output
with open(outputFileName, 'wb') as f:
for command in commands:
child.sendline(command)
child.expect(device_prompt)
f.write(child.before)
child.logout()
The script further expands on our first Pexpect program with the following additional features:
- It use SSH instead of telnet
- It supports multiple commands instead of just one by making the commands into a list (line 8) and loop through the commands (starting line 20)
- It prompts the user for username and password instead of hardcoding them in the script
- It writes the output into a file to be further analyzed
For Python 2, use raw_input() instead of input() for the username prompt. Also use w for file mode instead of wb.
推薦閱讀
- ClickHouse性能之巔:從架構設計解讀性能之謎
- 深入理解Bootstrap
- Beginning C++ Game Programming
- Python數據分析基礎
- Learning C++ Functional Programming
- Architecting the Industrial Internet
- 名師講壇:Java微服務架構實戰(SpringBoot+SpringCloud+Docker+RabbitMQ)
- Full-Stack React Projects
- Learning OpenStack Networking(Neutron)(Second Edition)
- 現代C++編程實戰:132個核心技巧示例(原書第2版)
- 大話Java:程序設計從入門到精通
- SciPy Recipes
- 創意UI:Photoshop玩轉APP設計
- 智能手機故障檢測與維修從入門到精通
- R語言:邁向大數據之路(加強版)