在命令行上运行时,telnetlib会卡住

2024-06-02 07:05:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个关闭脚本来远程关闭一些服务器;我已经启用了telnet,当使用PuTTY或类似工具时,运行关闭过程很简单。你知道吗

我尝试使用以下Python脚本实现自动化:

import telnetlib

doReadWrite(tn, wrt, rd):
    if wrt is not None:
        tn.write(wrt)
    if rd is not None:
        return tn.read_until(rd)

ip_list = [list of IP addresses]

for ip in ip_list:
    server = telnetlib.Telnet(ip)
    doReadWrite(server, None, b'login: ')
    doReadWrite(server, username+b'\r\n', b'Password: ')
    doReadWrite(server, password+b'\r\n', b'$')
    doReadWrite(server, b'su\r\n', b'Password: ')
    doReadWrite(server, root_pass+b'\r\n', b'#')
    doReadWrite(server, b'/sbin/halt\r\n', None)
    server.close()

如果我在交互式shell中逐行输入上面的脚本,它将按预期工作,但是如果我从命令行运行它,即python shutdown_脚本.py,它将挂起;如果指定超时,则会出现超时错误。 如果我显式地以python2.7的形式运行脚本,那么它工作得很好,目前是一个可以接受的解决方案。你知道吗

交互shell中命令的执行与导致这种行为差异的命令行interpreter之间有什么区别?你知道吗


Tags: ip脚本noneifserverisnotpassword