반응형
다음 코드로 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 for 루프를 사용하여 사전 채우기 (Python) (0) | 2020.11.23 |
---|---|
파이썬 Python over Tor를 사용하여 요청하기 (0) | 2020.11.23 |
파이썬 Python-목록에서 동일한 값을 찾고 새 목록을 함께 그룹화 (0) | 2020.11.23 |
파이썬에서 문자열에서 숫자 제거하기 (0) | 2020.11.23 |
파이썬 비어 있지 않은 폴더를 제거 / 삭제하려면 어떻게합니까? (0) | 2020.11.23 |
댓글