2016-09-20 5 views
0

私のコードは、イベントのprintステートメントから必要なものを出力します。しかし、私はどのようにクラスがインスタンス化される方法のためにデータを返すのか分かりません。さらに、printステートメントは、pythoncom.PumpWaitingMessages()がインクルードされている場合にのみ機能しますが、印刷されたデータは返されません。サードパーティの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> 

答えて

0

私のソリューションはようです続く。これは醜く間違っているかもしれませんが、私には必要なものがあります。誰かがより良い方法を持っていれば私は編集して幸せです。

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 
関連する問題