【问题标题】:Python telnet works in command line but not in scriptPython telnet 在命令行中有效,但在脚本中无效
【发布时间】:2013-02-07 23:48:53
【问题描述】:

我正在编写一个 python 脚本来自动关闭 Android 模拟器。我曾经在 Linux 环境中工作,但现在我正在将代码迁移到 Windows。问题是,

$ adb emu kill

在 Windows 上不起作用,所以我求助于制作一个 python 脚本,它可以远程登录到模拟器并杀死模拟器。代码如下:

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()

当我这样做时,它完美无缺。谁能告诉发生了什么?

【问题讨论】:

    标签: android python telnet


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。我收到了你的这个建议。 :)
    猜你喜欢
    • 2021-11-13
    • 2017-03-26
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2012-01-31
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多