0
내 코드는 이벤트의 print 문에서 필요한 것을 인쇄합니다. 그러나 클래스가 인스턴스화되는 방식 때문에 데이터를 반환하는 방법을 알지 못합니다. 또한 print 문은 pythoncom.PumpWaitingMessages()가 포함되어있을 때만 작동하지만 인쇄 된 데이터는 반환하지 않습니다.제 3 자 COM을 사용하여 DispatchWithEvents 이벤트 반환
다른 함수가 액세스 할 반환 값으로 인쇄 된 것을 사용할 수 있기를 바랍니다.
(더 악화에 오는 경우에, 나는) 최후의 수단 인 (표준 출력을 캡처 할 수 있습니다.)
코드 :
이# Standard Lib
import time
# Third Party
from win32com.client import DispatchWithEvents
import pythoncom
# Local Lib
import scan_var
class Events(object):
def OnBarcodeEvent(self, eventType=pythoncom.Empty, pscanData=pythoncom.Empty):
print pscanData
return pscanData
zebra = DispatchWithEvents("CoreScanner.CoreScanner", Events)
# open api
open_status = zebra.Open(0, [1], 1)
print "Open status: {}".format(open_status)
# get scanners
get_scanners = zebra.GetScanners(0, [1])
print "get_scanners: {}".format(get_scanners)
# Register for events
register = zebra.ExecCommand(1001,scan_var.register_for_events)
print "register: {}".format(register)
# PEWPEWPEW (pull trigger)
fire_result = zebra.ExecCommand(2011, scan_var.pull_trigger)
print "PEWPEWPEW {}".format(fire_result)
time.sleep(5)
while True:
time.sleep(1)
pythoncom.PumpWaitingMessages()
출력 :
이Open status: 0
get_scanners: (1, (1,),504</VID> <PID>6400</PID> ...
register: (u'', 0)
PEWPEWPEW (u'', 0)
<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
<scannerID>1</scannerID>
<arg-xml>
<scandata>
<modelnumber>new_hotness </modelnumber>
<serialnumber>1522501a0501156 </serialnumber>
<GUID>2A4BE99CFCEFD047837ADF0082aD51AD5</GUID>
<datatype>27</datatype>
<datalabel>0x39 0x32 0x304 ...</datalabel>
<rawdata>0x22 0x03 0x00 ... </rawdata>
</scandata>
</arg-xml>
</outArgs>