Python telnet在命令行中可用,但脚本中无效
我正在写一个Python脚本,用来自动关闭Android模拟器。我以前在Linux环境下工作,但现在我把代码迁移到Windows上。问题是,
$ adb emu kill
在Windows上不管用,所以我决定写一个Python脚本,通过telnet连接到模拟器,然后杀掉它。以下是我的代码:
import telnetlib
host = "localhost"
port = "5554"
tn = telnetlib.Telnet(host,port)
tn.write("kill\n")
tn.close()
我遇到的问题是,当我尝试运行这个代码时,输入
python killEmulator.py
这里的“killEmulator.py”是代码的文件名。
但是当我在命令行中逐行输入这个文件的内容时,它就能正常工作,并成功关闭模拟器。
import telnetlib
host = "localhost"
port = "5554"
tn = telnetlib.Telnet(host,port)
tn.write("kill\n")
tn.close()
这样做的时候,一切都很顺利。有人能告诉我这是怎么回事吗?
1 个回答
0
我不太清楚具体情况,但当你打开一个Telnet会话时,服务器需要启动一个新的命令行进程。在这个进程启动之前,服务器可能无法接收任何数据,这取决于服务器的实现方式。
解决你问题的一个简单方法是在tn.write("kill\n")
之前加上time.sleep(0.5)
,这样可以给服务器半秒钟的时间来准备。更优雅的做法是等到提示符出现后再发送任何内容,像这样:
r = tn.read_until("$ ", 5)
assert "$ " in r, "Timeout waiting for prompt!"
tn.write("kill\n")