2013-02-22 177 views
0

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

当我这样做,它的作品完美。任何人都可以告诉发生了什么事?

回答

0

我不知道这里的细节,但是当你打开一个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") 
+0

谢谢你的回答。我对你的这个建议有了解。 :) – Shabutie 2013-09-05 09:10:49

相关问题