0
Python能做的所有事情都给我留下了深刻的印象。我想知道的是,如果我可以实现一个可以调用JavaScript函数的Python脚本。Python Autobahn websocket
我使用的Python代码是检测NFC卡并读取唯一ID。目前我使用Java applet与HTML页面进行交互。我认为Python对此更轻,更好。
我试过的是一个简单的高速公路脚本server.py和一个index.html文件。
在server.py剧本我实现了这个代码,但它不工作..
#! /usr/bin/env python
from sys import stdin, exc_info
from time import sleep
from smartcard.CardMonitoring import CardMonitor, CardObserver
from smartcard.util import *
import sys
from twisted.internet import reactor
from twisted.python import log
from twisted.web.server import Site
from twisted.web.static import File
from autobahn.websocket import WebSocketServerFactory, \
WebSocketServerProtocol, \
listenWS
class EchoServerProtocol(WebSocketServerProtocol):
# a simple card observer that prints inserted/removed cards
class printobserver(CardObserver):
"""A simple card observer that is notified
when cards are inserted/removed from the system and
prints the list of cards
"""
def update(self, observable, (addedcards, removedcards)):
for card in addedcards:
print "+Inserted: ", toHexString(card.atr)
#call javascript function with <toHexString(card.atr)>
for card in removedcards:
print "-Removed: ", toHexString(card.atr)
#call javascript function with <toHexString(card.atr)>
try:
print "Insert or remove a smartcard in the system."
print "This program will exit in 10 seconds"
print ""
cardmonitor = CardMonitor()
cardobserver = printobserver()
cardmonitor.addObserver(cardobserver)
sleep(10)
# don't forget to remove observer, or the
# monitor will poll forever...
cardmonitor.deleteObserver(cardobserver)
import sys
if 'win32' == sys.platform:
print 'press Enter to continue'
sys.stdin.read(1)
except:
print exc_info()[0], ':', exc_info()[1]
if __name__ == '__main__':
if len(sys.argv) > 1 and sys.argv[1] == 'debug':
log.startLogging(sys.stdout)
debug = True
else:
debug = False
factory = WebSocketServerFactory("ws://localhost:9000",
debug = debug,
debugCodePaths = debug)
factory.protocol = EchoServerProtocol
factory.setProtocolOptions(allowHixie76 = True)
listenWS(factory)
webdir = File(".")
web = Site(webdir)
reactor.listenTCP(8080, web)
reactor.run()
在索引文件中有一个JavaScript函数
function NFCid(msg) {
alert(msg);
}
我如何可以调用这个函数inside server.py
NFCid(toHexString(card.atr))
Java小应用程序在浏览器中运行,并且正确签名时可以访问浏览器沙箱以外的内容。在Python中没有相同之处。 –
你没有足够的信息在这里,代码甚至没有看起来有效。一个普遍的观察,就pyscard和扭曲,我怀疑你可以直接使用它们,因为pyscard没有扭曲感知,并可能在一个单独的线程监控。 – jlujan