0

Android Emulator を自動的に閉じる Python スクリプトを作成しています。以前は Linux 環境で作業していましたが、現在はコードを Windows に移行しています。問題は、

$ adb emu kill

Windows では動作しないため、エミュレーターに telnet してエミュレーターを強制終了する python スクリプトを作成することに頼っています。コードは次のとおりです。

import telnetlib
host = "localhost"
port = "5554"

tn = telnetlib.Telnet(host,port)
tn.write("kill\n")
tn.close()

これで発生した問題は、入力時にこのコードを実行しようとすると機能しないことです

python killEmulator.py

「killEmulator.py」はコードのファイル名です。

しかし、コマンド ラインでこのファイルの行を 1 行ずつ入力すると、動作し、エミュレーターを強制終了します。

import telnetlib
host = "localhost"
port = "5554"
tn = telnetlib.Telnet(host,port)
tn.write("kill\n")
tn.close()

このようにすると、完璧に機能します。誰が何が起こっているのか教えてもらえますか?

4

1 に答える 1

0

詳細はわかりませんが、Telnet セッションを開くと、サーバーは新しいシェル プロセスを開始する必要があり、サーバーの実装によっては、シェルが開始されるまでデータを受け入れることができない可能性があります。

問題の簡単な修正方法は、time.sleep(0.5)beforeを追加するだけtn.write("kill\n")で、サーバーの準備に 0.5 秒を与えることです。よりエレガントな方法は、次のように、何かを書き込む前にプロンプ​​トを待つことです。

r = tn.read_until("$ ", 5)
assert "$ " in r, "Timeout waiting for prompt!"
tn.write("kill\n")
于 2013-03-20T09:24:29.460 に答える