본문 바로가기
파이썬

파이썬 "[오류 6] 핸들이 잘못되었습니다."를 수정하려면 어떻게해야합니까? PySerial 사용

by º기록 2020. 11. 23.
반응형

다음 코드로 PySerial을 사용하여 Windows 7 PC에서 휴대폰에 연결하려고합니다.

import wmi
import serial

c = wmi.WMI()
modem = c.query("SELECT * FROM Win32_POTSModem").pop()
ser = serial.Serial(modem.AttachedTo, modem.MaxBaudRateToSerialPort)

try:
    ser.write('at \r\n')
    print ser.readline()
finally:
    ser.close()

그러나 쓰기 호출에서 다음 오류가 발생합니다.

Traceback (most recent call last):
  File "D:\Alasdair\Documents\Python Scripts\Phone Interface\test.py", line 14, in <module>
    ser.write('at \r\n')
  File "C:\Python26\Lib\site-packages\serial\serialwin32.py", line 255, in write
    raise SerialException("WriteFile failed (%s)" % ctypes.WinError())
SerialException: WriteFile failed ([Error 6] The handle is invalid.)

TeraTerm과 연결을 시도했는데 제대로 작동하므로 전화 자체 연결에는 문제가 없습니다.

나는 해결책을 찾으려고 노력했지만 효과가있는 것을 찾지 못했습니다. 어떤 아이디어?

 

해결 방법

 

나는 Windows 7 64 비트, Python 2.6을 사용하고 있으며 동일한 오류가 발생합니다.

ser = serial.Serial(3,115200,timeout=1)
ser.read()
#or ser.write("whatever")

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    ser.read(1)
  File "build\bdist.win-amd64\egg\serial\serialwin32.py", line 236, in read
    raise SerialException("ReadFile failed (%s)" % ctypes.WinError())
SerialException: ReadFile failed ([Error 6] The handle is invalid.)

c 라이브러리를 사용하여 유사한 프로그램을 사용할 때 동일한 포트가 올바르게 응답합니다. 여기서 무슨 일이 일어나나요? pyserial 또는 ctypes의 버그처럼 들립니다. 64 비트도 사용하고 있습니까?

pyserial로 작성하기위한 소스 코드는 매우 간단합니다.

def write(self, data):
        """Output the given string over the serial port."""
        if not self.hComPort: raise portNotOpenError
        #~ if not isinstance(data, (bytes, bytearray)):
            #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
        # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview
        data = bytes(data)
        if data:
            #~ win32event.ResetEvent(self._overlappedWrite.hEvent)
            n = win32.DWORD()
            err = win32.WriteFile(self.hComPort, data, len(data), ctypes.byref(n), self._overlappedWrite)
            if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
                raise SerialException("WriteFile failed (%s)" % ctypes.WinError())

64 비트 ctype의 문제일까요?

최신 정보: 나에게는 적어도 64 비트 문제가 있습니다. 방금 x86 버전의 Python (이번에는 3.1)을 설치했는데 이제 제대로 작동합니다. 사실상 64 비트 ctype은 64 비트 라이브러리 만 가져올 수 있습니다. 그래도 운영 체제 라이브러리에 연결할 수 없다는 것이 매우 이상하게 들립니다.

 

참조 페이지 https://stackoverflow.com/questions/3028786

 

 

반응형

댓글