2011-04-21 36 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解决这个问题。