Heim  >  Fragen und Antworten  >  Hauptteil

Python-Methodenaufruf

Teil des Codes:

#打开串口
ser=serial.Serial('COM3', 9600)
#开启一个线程
th=threading.Thread(target=thread_read, args=(ser, msg_parsed))
th.start()

def thread_read(ser, callback=None):
     buf=b' '
     while running.is_set():
            buf=read_data(ser, buf,callback=None)

def read_data(ser, buf, callback=None):
     if callback is None:
            callback=print
     buf +=  ser.read(ser.inwaiting())

Warum erhalte ich eine Fehlermeldung, wenn ich inwaiting() in der Methode read_data() aufrufe, die besagt, dass es kein Attribut „inwaiting()“ gibt? Es ist normal, ser.inwaiting() außerhalb der Methode zu schreiben die Referenz des seriellen Objekts in die Methode? Der Buchmeister antwortet!

学习ing学习ing2686 Tage vor1052

Antworte allen(2)Ich werde antworten

  • 天蓬老师

    天蓬老师2017-06-12 09:25:06

    你别传对象,用全局变量试试

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-06-12 09:25:06

    print(dir(ser))打印ser的所有方法,找到inWaitingin_waiting,没有inwaiting,所以报错。
    你确定在外面调用的是inwaiting吗?

    ['BAUDRATES', 'BYTESIZES', 'PARITIES', 'STOPBITS', '_GetCommModemStatus', '_SAVED_SETTINGS', '__abst
    ractmethods__', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__'
    , '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__'
    , '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__re
    duce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_abc_cache', '_
    abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', '_baudrate', '_break_state', '_
    bytesize', '_cancel_overlapped_io', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWrita
    ble', '_close', '_dsrdtr', '_dtr_state', '_inter_byte_timeout', '_orgTimeouts', '_overlapped_read',
    '_overlapped_write', '_parity', '_port', '_port_handle', '_reconfigure_port', '_rs485_mode', '_rts_s
    tate', '_rtscts', '_stopbits', '_timeout', '_update_break_state', '_update_dtr_state', '_update_rts_
    state', '_write_timeout', '_xonxoff', 'applySettingsDict', 'apply_settings', 'baudrate', 'break_cond
    ition', 'bytesize', 'cancel_read', 'cancel_write', 'cd', 'close', 'closed', 'cts', 'dsr', 'dsrdtr',
    'dtr', 'fileno', 'flush', 'flushInput', 'flushOutput', 'getCD', 'getCTS', 'getDSR', 'getRI', 'getSet
    tingsDict', 'get_settings', 'inWaiting', 'in_waiting', 'interCharTimeout', 'inter_byte_timeout', 'ir
    ead_until', 'isOpen', 'is_open', 'isatty', 'name', 'open', 'out_waiting', 'parity', 'port', 'portstr
    ', 'read', 'read_all', 'read_until', 'readable', 'readall', 'readinto', 'readline', 'readlines', 're
    set_input_buffer', 'reset_output_buffer', 'ri', 'rs485_mode', 'rts', 'rtscts', 'seek', 'seekable', '
    sendBreak', 'send_break', 'setDTR', 'setPort', 'setRTS', 'set_buffer_size', 'set_output_flow_control
    ', 'stopbits', 'tell', 'timeout', 'truncate', 'writable', 'write', 'writeTimeout', 'write_timeout',
    'writelines', 'xonxoff']

    Antwort
    0
  • StornierenAntwort