Python 从Google App Engine调用PiCloud函数时出现问题

Python 从Google App Engine调用PiCloud函数时出现问题,python,google-app-engine,Python,Google App Engine,我对GAE和PiCould都是新手,当我想从GAE调用已发布函数时,我有一些基本问题。我调用已发布函数的方法似乎不被认可。你能给我一些建议吗 谢谢你的帮助 更新:我不知道为什么人们认为这个问题没有价值。我的观点是,由于GAE只接受纯Python文件,因此有必要为用其他语言(如Fortran77)编写的模型找到一种方法。因此,一些非Python程序可以上传到其他云服务器,如PiCloud,然后由GAE调用。在人们的帮助下(谢谢!)我已经解决了这个问题。我已在下面附上我的代码,供其他人参考: imp

我对GAE和PiCould都是新手,当我想从GAE调用已发布函数时,我有一些基本问题。我调用已发布函数的方法似乎不被认可。你能给我一些建议吗

谢谢你的帮助

更新:我不知道为什么人们认为这个问题没有价值。我的观点是,由于GAE只接受纯Python文件,因此有必要为用其他语言(如Fortran77)编写的模型找到一种方法。因此,一些非Python程序可以上传到其他云服务器,如PiCloud,然后由GAE调用。在人们的帮助下(谢谢!)我已经解决了这个问题。我已在下面附上我的代码,供其他人参考:

import os
os.environ['DJANGO_SETTINGS_MODULE']='settings'
from google.appengine.ext.webapp.util import run_wsgi_app
import webapp2 as webapp
import json
import base64
#import urllib2
import urllib

from google.appengine.api import urlfetch

api_key='1111'
api_secretkey='adsad'

####define and publish a function######
def square(x):
    """Returns square of a number"""
    print 'Squaring %d' % x
    return x*x

cloud.setkey(api_key, api_secretkey)
cloud.rest.publish(square, "square_func")

url = 'https://' + 'api.picloud.com/r/3303/square_func' 
input_val=22

#######call the function################# 
base64string = base64.encodestring('%s:%s' % (api_key, api_secretkey))[:-1]
http_headers = {'Authorization' : 'Basic %s' % base64string}
data = urllib.urlencode({"x":input_val})
response = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=http_headers)

jid= json.loads(response.content)['jid']
output_st = 'queued'
#
while output_st=="queued":
    response_st = urlfetch.fetch(url='https://api.picloud.com/job/?jids=%s&field=status' %jid, headers=http_headers)
    output_st = str(json.loads(response_st.content)['info']['%s' %jid]['status'])

url_val = 'https://api.picloud.com/job/result/?jid='+str(jid)
response_val = urlfetch.fetch(url=url_val, method=urlfetch.GET, headers=http_headers)
output_val = json.loads(response_val.content)['result']


class Page(webapp.RequestHandler):
    def get(self):
        html = """<table width="600" border="1">
                          <tr>
                            <th width="480" scope="col">Outputs</div></th>
                            <th width="120" scope="col">Value</div></th>                            
                          </tr>
                          <tr>
                            <td>Input</td>
                            <td>%s</td></tr>                          
                          <tr>
                            <td>picloud jid</td>
                            <td>%s</td></tr>
                          <tr>
                            <td>picloud status</td>
                            <td>%s</td></tr>
                          <tr>
                            <td>picloud results</td>
                            <td>%s</td></tr>                             
                         </table>"""%(input_val, jid, output_st, output_val)

        self.response.out.write(html)

app = webapp.WSGIApplication([('/.*', Page)], debug=True)

def main():
    run_wsgi_app(app)

if __name__ == '__main__':
    main()
导入操作系统
os.environ['DJANGO\u SETTINGS\u MODULE']='SETTINGS'
从google.appengine.ext.webapp.util导入运行\u wsgi\u应用程序
将webapp2导入为webapp
导入json
导入base64
#导入urllib2
导入URL库
从google.appengine.api导入urlfetch
api_key='1111'
api_secretkey='adsad'
####定义并发布函数######
def方形(x):
“”“返回数字的平方”“”
打印“平方%d”%x
返回x*x
setkey(api_key,api_secretkey)
cloud.rest.publish(square,“square\u func”)
url='https://'+'api.picloud.com/r/3303/square_func'
输入值=22
#######调用函数
base64string=base64.encodestring(“%s:%s%”(api_密钥,api_secretkey))[:-1]
http_头={'Authorization':'Basic%s'%base64string}
data=urllib.urlencode({“x”:输入值})
response=urlfetch.fetch(url=url,payload=data,method=urlfetch.POST,headers=http\u headers)
jid=json.load(response.content)['jid']
输出\u st='queued'
#
当输出_st==“排队”时:
response\u st=urlfetch.fetch(url=)https://api.picloud.com/job/?jids=%s&field=status“%jid,headers=http\u headers)
输出\u st=str(json.loads(response\u st.content)['info']['%s'%jid]['status']))
url_val='1〕https://api.picloud.com/job/result/?jid=“+str(jid)
response_val=urlfetch.fetch(url=url_val,method=urlfetch.GET,headers=http_headers)
output\u val=json.load(response\u val.content)['result']
类页面(webapp.RequestHandler):
def get(自我):
html=”“”
输出
价值
输入
%
皮云吉德
%
微微云状态
%
微微云结果
%
“”“%(输入值、jid、输出值、输出值)
self.response.out.write(html)
app=webapp.WSGIApplication([('/.*',Page)],debug=True)
def main():
运行wsgi应用程序(应用程序)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
该行应为:

output_val = json.loads(response.content)

谢谢你的回复。我将其更改为output_val=json.load(response.content),但这是相同的错误。。。错误2012-03-26 15:47:23890 cgi.py:121]回溯(最后一次调用):文件“C:\Users\th\Dropbox\t-picloud\main.py”,第28行,在输出=json.load(响应)文件“C:\Python27\lib\json_init_u2;.py”中,第274行,在加载返回加载(fp.read(),AttributeError:“\u URLFetchResult”对象没有属性“read”@thong:您在基本API读取方面存在问题。除了@Shay为您修复的错误之外,您还未正确使用
json
模块。特别是,
json.load()
需要一个类似文件的对象,但是
urlfetch.fetch
。我建议您退后一步,仔细阅读您希望使用的API。正确的
json
方法是
loads
。这是一个很好的例子,说明了为什么在不了解代码的情况下永远不应该使用代码。更具体地说,
urllib2
!=
urlfetch
@thong:我很抱歉早些时候有点不高兴。我很高兴你能让它工作。干得好!谢谢你的评论。祝你的项目好运。@bernie没关系。没有你的帮助,我想不出来。我不认为你被否决是因为你的问题不相关,而是因为你没有实际上告诉了我们问题是什么,或者向我们提供了stacktrace或其他调试信息。