我有一个用Python编写的小桌面游戏,希望能够在游戏运行时访问它的内部。我想通过在单独的线程和服务页面上运行web.py来实现这一点。因此,当我访问http://localhost:8080/map时,它会显示当前级别的地图以进行调试。
我安装并运行了web.py,但我真的不知道从哪里开始。我尝试在一个单独的线程中启动web.application,但由于某种原因我无法在线程之间共享数据(我认为)。
下面是一个简单的例子,我正在使用测试这个想法。我认为http://localhost:8080/每次都会返回不同的数字,但它会一直显示相同的数字(5)。如果我在while循环中打印common_value,它会递增,但它从5开始。
我在这里错过了什么,接近合情合理的方法是什么?如果可能的话,我真的想避免使用数据库。
import web
import thread
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
common_value = 5
class hello:
def GET(self):
return str(common_value)
if __name__ == "__main__":
thread.start_new_thread(app.run, ())
while 1:
common_value = common_value + 1
答案 0 :(得分:1)
在搜索了一下之后,我发现了一个有效的解决方案:
如果common_value在单独的模块中定义并从那里导入,则上述代码有效。所以实质上(原因是命名):
thingy.py
common_value = 0
server.py
import web
import thread
import thingy
import sys; sys.path.insert(0, ".")
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
thingy.common_value = 5
class hello:
def GET(self):
return str(thingy.common_value)
if __name__ == "__main__":
thread.start_new_thread(app.run, ())
while 1:
thingy.common_value = thingy.common_value + 1
答案 1 :(得分:0)
我发现了带有参数的错误,但是
改变:
# load certificate
certificate_server = OpenSSL::X509::Certificate.new(File.read("certificate_server.crt"))
# CERT INFORMATION IS VERIFIED SUCCESSFULLY HERE
# DIGEST IS VERIFIED SUCCESSFULLY HERE
# certificate signature initialization
response_signature = Akami::WSSE::VerifySignature.new(response)
document = response_signature.document
namespaces = response_signature.namespaces
# retrieve Signature data & digest value
data = document.at_xpath('//wse:Security/ds:Signature/ds:SignedInfo', namespaces).canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
signature = Base64.decode64(document.at_xpath('//wse:Security/ds:Signature/ds:SignatureValue', namespaces).text)
# check if Signature is valid
return false unless certificate_server.public_key.verify(OpenSSL::Digest::SHA1.new, signature, data)
true
:
使用:
certificate_server.public_key.verify(signature_digester, signature, data)
现在有效。