0

私のコードは、Events の print ステートメントから必要なものを出力します。しかし、クラスがインスタンス化される方法のために、データを返す方法がわかりません。さらに、print ステートメントは pythoncom.PumpWaitingMessages() が含まれている場合にのみ機能しますが、印刷されたデータなどは返しません。

出力されたものを戻り値として使用して、他の関数からアクセスできるようにしたいと考えています。

(さらに悪化した場合は、stdout をキャプチャすることもできます (これは最後の手段です)。)

コード:

# 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>
4

1 に答える 1