2013-02-22 2 views
0

Я пишу скрипт python для автоматического закрытия Android-эмулятора. Я работал в среде Linux, но теперь я переношу код в Windows. Проблема заключается в том,Python telnet работает в командной строке, но не в скрипте

$ adb emu kill 

Не работает на Windows, поэтому я прибегаю к созданию сценария питона, который telnets в эмуляторе и убивает эмулятор. Вот код:

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, серверу необходимо запустить новый процесс оболочки и, вероятно, не может принимать какие-либо данные до тех пор, пока не будет запущена оболочка, в зависимости от сервера реализация.

Простым решением проблемы является просто добавить time.sleep(0.5) до tn.write("kill\n"), предоставляя серверу полсекунды, чтобы подготовиться. Более элегантный способ заключается в том, чтобы дождаться подсказки перед тем, как написать что-нибудь, например:

+0

Благодарим за ответ. Я получил это с вашим предложением. :) – Shabutie

Смежные вопросы