2011-04-21 108 views
5
def start_test(request): 
    os.system('echo Starting emulator...') 
    os.system('./android-sdk-linux_x86/tools/emulator -avd testavd &') 
    return HttpResponse("OK") 

這是我正在嘗試做的準系統代碼。
執行此代碼時,服務器在運行模擬器時停止響應。任何幫助讚賞。
我正在使用django開發服務器。這裏是服務器輸出:從Python-Django啓動Android模擬器

Django version 1.1.1, using settings 'Cloust.settings' 
Development server is running at http://0.0.0.0:8000/ 
Quit the server with CONTROL-C. 
Starting emulator... 
[21/Apr/2011 02:00:06] "GET /start_test/a.apk/ HTTP/1.1" 200 5 
emulator: warning: opening audio output failed 

emulator: emulator window was out of view and was recentred 
+0

你爲什麼要這麼做?模擬器將在服務器上運行,並且不會從客戶端看到。重點是什麼? – 2011-04-21 08:06:13

+0

@Daniel Roseman:我今天有更多時間,所以爲了正確回答你的問題,可以通過VNC訪問模擬器。更具體地說,使用TightVNC和鱷梨醬。 – Mark 2011-04-22 15:13:06

回答

0

我還沒有得到解決,以妥善解決這一問題,但使用subprocess.Popen讓我後來在模擬器上執行命令:

print 'Starting emulator...' 
subprocess.Popen(['emulator', '-avd', 'testavd']) 
os.system('adb wait-for-device') 
os.system('Perform whatever adb commands you need') 

值得一提的是,這是使用Django開發服務器,已使用sudo啓動的,所以顯然這是很不理想。

+0

Heey Mark,我能夠推出我的AVD。但我需要啓動一個乾淨的AVD,就像擦除用戶數據並啓動一個新的。我應該怎麼做? – 2014-09-10 12:14:45

2

也許你應該嘗試在單獨的線程中運行模擬器?

E.g.

import subprocess 
thread = threading.Thread(target=subprocess.popen(['./android-sdk-linux_x86/tools/emulator', '-avd', 'testavd', '&']) 
thread.start() 
1

考慮到您使用的是django,您可能需要以某種方式管理模擬器。 在這種情況下,我認爲線程並不是一個好的選擇。

我建議尋找到任務管理在這種情況下,用類似http://code.google.com/p/django-tasks/

0

亞行的一個問題是您需要多個命令才能完成任務。
例如:

adb shell 

su 

cp /data/local/x /data/local/y 

exit 

adb pull /data/local/y 

可以這樣使用python POPEN和OS系統來完成?試了下面的例子沒有成功..

print 'Starting emulator...' 
subprocess.Popen(['emulator', '-avd', 'testavd']) 
os.system('adb wait-for-device') 
os.system('Perform whatever adb commands you need') 
0

不知道它是否會幫助所以(希望它)。

我希望模擬器在自動化測試開始之前打開,對於某些共振模擬器無法做到這一點。 在我的情況下,我需要添加模擬器的完整路徑。

check_output(["/Users/{USER_NAME}/Library/Android/sdk/tools/emulator", "-avd", "Pixel_API_26"]) 

希望它能幫助別人,直到appium解決這個問題。