Python的telnet工作在命令行,但不是在脚本
问题描述:
我正在写一个python脚本来自动关闭一个Android模拟器。我曾经在Linux环境下工作,但现在我正在将代码迁移到Windows。问题是,Python的telnet工作在命令行,但不是在脚本
$ adb emu kill
不能在Windows工作,所以我采取使这一Telnet方式登录到仿真器和杀死模拟器一个Python脚本。下面的代码:
import telnetlib
host = "localhost"
port = "5554"
tn = telnetlib.Telnet(host,port)
tn.write("kill\n")
tn.close()
我这种遭遇的问题是,它并没有当我输入的时候我尝试运行此代码的工作
蟒蛇killEmulator.py
“killEmulator.py”是代码的文件名。
但是当我在命令行中逐一输入这个文件的行时,它工作并设法终止仿真器。
import telnetlib
host = "localhost"
port = "5554"
tn = telnetlib.Telnet(host,port)
tn.write("kill\n")
tn.close()
当我这样做,它的作品完美。任何人都可以告诉发生了什么事?
答
我不知道这里的细节,但是当你打开一个Telnet会话时,服务器需要启动一个新的shell进程,并且在shell启动之后可能不能接受任何数据,这取决于服务器实现。
针对您的问题的简单解决方法是在tn.write("kill\n")
之前添加time.sleep(0.5)
,让服务器准备好半秒钟。更优雅的方式是在写任何东西之前等待提示,如下所示:
r = tn.read_until("$ ", 5)
assert "$ " in r, "Timeout waiting for prompt!"
tn.write("kill\n")
谢谢你的回答。我对你的这个建议有了解。 :) – Shabutie 2013-09-05 09:10:49