【问题标题】:Return Events from DispatchWithEvents using third party COM使用第三方 COM 从 DispatchWithEvents 返回事件
【发布时间】:2017-01-28 20:22:19
【问题描述】:

我的代码从事件中的打印语句中打印出我需要的内容。但是,由于类的实例化方式,我不知道如何返回数据。此外,打印语句仅在包含 pythoncom.PumpWaitingMessages() 时才有效,但它不会返回打印的数据或任何内容。

我希望能够将打印的内容用作返回值,以供其他函数访问。

(如果情况变得更糟,我可以捕获标准输出(这是最后的手段)。)

代码:

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

【问题讨论】:

    标签: python python-2.7 com win32com pythoncom


    【解决方案1】:

    我的解决方案如下。这可能是丑陋和错误的,但它让我得到了我需要的东西。如果有人有更好的方法,我很乐意编辑。

    class Events(object):
    
        def get_barcode(self):
            return self.pscanData
    
        def OnBarcodeEvent(self, eventType=1, pscanData=pythoncom.Empty):
            self.pscanData = pscanData
            print self.pscanData
    
    
    
    def save_serial_to_cache():
        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)
        for counter in xrange(0, 5):
            time.sleep(1)
            pythoncom.PumpWaitingMessages()
        return zebra._obj_.get_barcode.__self__.pscanData
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 2011-08-28
      • 2017-05-14
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多