我不得不在针对移动电话的项目中尽早做出技术选择.我看到有一个针对S60的python衍生产品,并想知道是否有人可以分享经验,好的和坏的,并建议适当的IDE和模拟器.
请不要告诉我,我应该在Windows Mobile上开发,我已经决定不这样做,所以会将这些答案标记下来.
我目前正在为S60平台开发移动应用程序,并专门研究PyS60.它似乎表明它可以编译成本机.sis文件而无需嵌入式python解释器.通过阅读文档,我找不到任何明确提到的陈述.虽然我现在正在下载SDK,模拟器以及在Linux上测试开发所需的一大堆工具链,但我想我会在这里问一下.
我正在考虑在业余时间制作一些移动应用程序,我希望能够将它们放在网上供任何人使用(可能是开源的).我刚刚和PyS60合作过,我真的很喜欢它.
我的问题是,我不想在这些应用程序上花钱(我不打算以任何方式从他们那里赚钱)而且我要正确分发PyS60应用程序,看起来我需要购买昂贵的发行商许可证,然后每次我想要一个应用程序签名仍然支付.我知道我可以分发脚本,但这需要最终用户下载pys60解释器......
我也很乐意看到其他语言/平台.iPhone应用程序需要一个开发许可证,我需要一个Mac来编译代码(我没有,我是一个Linux x86用户).
J2ME应用程序似乎需要"Java Verified"才能进入OVI商店.我认为它们是否通过其他方式分发?
基本上我正在寻找可以在我的手机上运行的应用程序(N95),如果其他人看到它,我可以说从www.example.com/myapp获取它就可以了.我也有兴趣使用像OVI商店这样的东西来分发它.但我不想花大钱.
任何人对此事有任何经验或知识吗?J2ME是我唯一的选择吗?
我正在尝试为我的手机编写一个简单的Python脚本,以便使用urrlib2定期加载网页.实际上我并不关心服务器响应,我只想将URL中的一些值传递给PHP.问题是Python for S60使用旧的2.5.4 Python核心,它似乎在urrlib2模块中有内存泄漏.正如我所读到的,在每种类型的网络通信中似乎都存在这样的问题.此错误已在此处报告几年前,虽然也发布了一些解决方法.我已尝试在该页面上找到的所有内容,并且在Google的帮助下,但在加载约70页后,我的手机仍然耗尽内存.奇怪的是,Garbege Collector似乎也没有任何区别,只是让我的脚本慢得多.据说,较新的(3.1)核心解决了这个问题,但遗憾的是我不能等待一年(或更长时间)来实现S60端口.
这是我添加的每一个小技巧后我的脚本的样子:
import urrlib2, httplib, gc
while(true):
url = "http://something.com/foo.php?parameter=" + value
f = urllib2.urlopen(url)
f.read(1)
f.fp._sock.recv=None # hacky avoidance
f.close()
del f
gc.collect()
任何建议,如何让它永远工作而不会得到"无法分配内存"的错误?感谢前进,欢呼,b_m
更新: 我已经设法在内存不足之前连接92次,但它仍然不够好.
update2: 尝试前面建议的套接字方法,这是迄今为止第二个最好的(错误的)解决方案:
class UpdateSocketThread(threading.Thread):
def run(self):
global data
while 1:
url = "/foo.php?parameter=%d"%data
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('something.com', 80))
s.send('GET '+url+' HTTP/1.0\r\n\r\n')
s.close()
sleep(1)
我从上面尝试了一些小技巧.大约50个上传后线程关闭(手机剩下50MB内存,显然Python shell没有.)
更新:我想我越来越接近解决方案了!我尝试发送多个数据而不关闭并重新打开套接字.这可能是关键,因为此方法只会留下一个打开的文件描述符.问题是:
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect(("something.com", 80))
socket.send("test") #returns 4 (sent bytes, which is cool)
socket.send("test") #4
socket.send("test") #4 …Run Code Online (Sandbox Code Playgroud) 我在python脚本中有以下代码
try:
# send the query request
sf = urllib2.urlopen(search_query)
search_soup = BeautifulSoup.BeautifulStoneSoup(sf.read())
sf.close()
except Exception, err:
print("Couldn't get programme information.")
print(str(err))
return
Run Code Online (Sandbox Code Playgroud)
我很担心,因为如果我遇到错误sf.read(),那么sf.clsoe()就不会被调用.我尝试放入sf.close()一个finally块,但是如果有一个异常,urlopen()则没有文件要关闭,我在finally块中遇到异常!
所以我试过了
try:
with urllib2.urlopen(search_query) as sf:
search_soup = BeautifulSoup.BeautifulStoneSoup(sf.read())
except Exception, err:
print("Couldn't get programme information.")
print(str(err))
return
Run Code Online (Sandbox Code Playgroud)
但这会with...在行上引发无效的语法错误.我怎么能最好地处理这个问题,我觉得很蠢!
正如评论者指出的那样,我使用的是Pys60,它是python 2.5.4
我想在PyS60中为我的诺基亚手机写一个小型蓝牙服务器应用程序.它需要能够发送对客户端请求的响应,并能够将数据推送到客户端.
选项1:如果我使用socket.recv(1024),程序会等到收到某些内容,因此服务器无法将数据推送到客户端.用于S60实现的Python缺少该socket.settimeout()方法,因此我无法编写正确的非阻塞代码.
oprion 2:socket.makefile()方法看起来不错,但无法使其发挥作用.当我更换为conn.recv(1024)to时fd = socket.makefile() fd.readline(),它没有读到任何东西.
选项3:查看select()函数,但没有运气.当我改变了conn.recv()对r,w,e = select.select([conn],[],[])像它已经建议客户甚至不连接.它挂在"等待客户......".奇怪...
我知道有很好的服务器实现和异步API-s,但我只需要一个非常基本的东西.提前致谢!
这就是我所拥有的:
sock = btsocket.socket(btsocket.AF_BT, btsocket.SOCK_STREAM)
channel = btsocket.bt_rfcomm_get_available_server_channel(sock)
sock.bind(("", channel))
sock.listen(1)
btsocket.bt_advertise_service(u"name", sock, True, btsocket.RFCOMM)
print "Waiting for the client..."
conn, client_mac = sock.accept()
print "connected: " + client_mac
while True:
try:
data = conn.recv(1024)
if len(data) != 0:
print "received [%s]" % data
if data.startswith("something"): conn.send("something\r\n")
else:
conn.send("some other …Run Code Online (Sandbox Code Playgroud) 我想在带有pys60的Symbian设备上使用Google Data API,但我找不到任何文档.有没有办法在Symbian上安装Google Data API Python客户端库?
当我启动任何应用程序时,我使用python为我的诺基亚5800(软件版本60.0.003)编写,它要求我连接互联网.应用程序不使用它或需要它.如果我跳过它,应用程序工作正常.
我正在使用带有Python 2.5.2的ensymble(PyS60应用程序打包器2.0.0)来创建应用程序,并在诺基亚手机上使用python版本2.0.0.
我试图只放"--caps ="或"--caps = ReadUserData"来检查是否会删除它,但它仍然要求访问点.即使是简单的应用程序:
print "Hello world!"
Run Code Online (Sandbox Code Playgroud)
有人知道我怎么能删除它?
谢谢.