Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409261
  • 博文数量: 101
  • 博客积分: 2247
  • 博客等级: 大尉
  • 技术积分: 979
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-15 22:39
文章分类

全部博文(101)

文章存档

2012年(1)

2011年(100)

分类: 嵌入式

2011-06-19 16:11:29

前言
   ASE 让人爱不释手,python 也是令人发狂的好东西,所以我们继续深入学习 ASE + Python!
 
远程运行
=======================================================================
根据参考1的信息,我们写了一个脚本,和前面的脚本(run_ase_python_scritpt.sh)一样,它可以在 Android 设备上运行位于 PC 侧的 python 脚本。
 
和 run_ase_python_scritpt.sh 不一样,它并不是把脚本放到目标机上再执行,而是在 PC 本地运行!
 
通过将某个 TCP 端口转发到目标机,这样:
1.         python的解释执行在 PC 侧
2.         核心的功能调用在目标机上
 
从而效率更高了!也可见 ASE 支持的Python 和 PC 侧没有两样!我们也从分体会到分布式计算的魅力!
 
~/android/testing/ase/python$ cat run_ase_python_scritpt2.sh
#!/bin/sh
#================================================================
# By:    zjujoe@yahoo.com
# YOU SHOULD INSTALL ASE AND PYTHON INTERPRETER ON TARGET FIRSTLY
#
# I am using ase_r25.apk, for other version, blow path may change
#
#start ASE sever  first:
# adb -s emulator-5554 shell am start -a com.google.ase.action.LAUNCH_SERVER -n com.google.ase/.activity.AseServiceLauncher
#
#then get AP_PORT number for notification
#================================================================
#set -x
#change this which ASE server listion to
TARGET_AP_PORT=40729
DEVICE="-s emulator-5554"
export AP_PORT=9999
 
#the script file to be run in ase
if [ $# -eq "1" ]; then
    FILE=$1
else
    echo $0 filename
    exit
fi
 
if ! [ -e android.py  ]; then
    echo "we need anroid.py from ase"
    exit
fi
 
adb ${DEVICE} forward tcp:${AP_PORT} tcp:${TARGET_AP_PORT}
python $1
 
注意:如果 ase 服务端口设置错误,将会出错:
songlixin@zjujoe-desktop:~/android/testing/ase/python$ ./run_ase_python_scritpt2.sh  hello_world.py
Traceback (most recent call last):
  File "hello_world.py", line 3, in
    droid.makeToast('Hello, Android!')
  File "/home/songlixin/android/testing/ase/python/android.py", line 54, in rpc_call
    return self._rpc(name, *args)
  File "/home/songlixin/android/testing/ase/python/android.py", line 43, in _rpc
    response = self.client.readline()
  File "/usr/lib/python2.6/socket.py", line 406, in readline
    data = self._sock.recv(self._rbufsize)
socket.error: [Errno 104] Connection reset by peer
 
比较一下两个脚本的运行时间,相差很大!
$ time ./run_ase_python_scritpt.sh  hello_world.py
0 KB/s (76 bytes in 0.087s)
5 KB/s (257 bytes in 0.044s)
real    0m1.839s
user    0m0.004s
sys 0m0.016s
 
$time ./run_ase_python_scritpt2.sh  ./hello_world.py
real    0m0.217s
user    0m0.020s
sys 0m0.016s
将脚本放到目标机上

$ adb push my_script.py /sdcard/ase/scripts
 
目标机上后台执行脚本

adb shell am start -a com.google.ase.action.LAUNCH_SCRIPT -n com.google.ase/.activity.AseServiceLauncher -e com.google.ase.extra.SCRIPT_NAME hello_world.py
目标机上终端里执行脚本

adb shell am start -a com.google.ase.action.LAUNCH_TERMINAL -n com.google.ase/.activity.AseServiceLauncher -e com.google.ase.extra.SCRIPT_NAME hello_world.py
启动 ASE server

adb shell am start -a com.google.ase.action.LAUNCH_SERVER -n com.google.ase/.activity.AseServiceLauncher
 
====================================================================
参考
1. 远程运行脚本
2.转载:
http://blog.csdn.net/zjujoe/archive/2010/06/18/5677787.aspx
 
阅读(892) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~