Python telnet在命令行中工作,但在脚本中不工作

时间:2013-02-22 11:12:31

标签: android 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 :(得分:0)

我不知道这里的细节,但是当你打开一个Telnet会话时,服务器需要启动一个新的shell进程,并且在shell启动之前可能无法接受任何数据,具体取决于服务器实现

对您的问题进行简单修复就是在time.sleep(0.5)之前添加tn.write("kill\n"),为服务器提供半秒准备。一种更优雅的方式是在写任何东西之前等待提示,如下所示:

r = tn.read_until("$ ", 5)
assert "$ " in r, "Timeout waiting for prompt!"
tn.write("kill\n")