Python telnet在命令行中可用,但脚本中无效

0 投票
1 回答
1589 浏览
提问于 2025-04-17 16:45

我正在写一个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")

撰写回答