python
  • python-2.7
  • pyserial
  • 2012-10-03 7 views 1 likes 
    1

    pyserial 2.6과 함께 python 2.7.2를 사용하고 있습니다. eol을 위해 "\ n"이외의 문자가있는 장치와 통신 할 때 pyserial.readline()을 사용하는 가장 좋은 방법은 무엇입니까? pyserial doc은 python 2.6+에서 pyserial.readline()이 더 이상 'eol ='인수를 사용하지 않지만 다음과 같이 io.TextIOWrapper를 사용하는 것이 좋습니다. ser = serial.serial_for_url ('loop : //', timeout = 1) 는 =에게 io.TextIOWrapper은 (io.BufferedRWPair (SER, SER)는)pyserial.readline() with python 2.7

    파이썬 io.BufferedRWPair doc 특별히 BufferedRWPair가 기본 원료 스트림에 대한 액세스를 동기화하려고 시도하지 않습니다 "라는, 그 접근 방식에 대해 경고 그러나

    . 당신은 통과 안 SIO 리더 및 라이터와 같은 객체이며 대신 BufferedRandom을 사용하십시오. "

    누군가 'eol'이외의 다른 eol로 작업하는 pyserial.readline()의 작동 예제를 가리킬 수 있습니까?

    감사합니다, 톰

    +0

    그냥'read()'를 사용하고 직접 줄을 나눌 수 있습니다. – TJD

    답변

    0

    읽기()는 (비트) 읽는 데이터에 대한 사용자 설정 가능한 최대 크기는 데이터 문자열이 예측 가능한 길이 있다면, 당신은 단순히는 고정 된 캡처 설정할 수 있습니다 길이 문자열. 그것은 일종의 'kentucky windage'입니다. 그러나 데이터 문자열의 크기가 일관성이 없으면 bork하지 않습니다.

    그 이상의 옵션은 데이터 스트림을 캡처하여 다른 파일에 쓰고 수동/프로그래밍 방식으로 항목을 분리하는 것입니다.

    예를 들어 데이터 스트림을 .csv 파일에 쓰고 구분 기호 변수를 EoL 문자로 조정할 수 있습니다.

    0

    s는 열려있는 serial.serial 객체이고 개행 문자는 \ r이라고 가정합니다. 그러면 줄 끝까지 읽고 '\ r'까지 문자열을 모두 반환합니다.

    def read_value(encoded_command): 
        s.write(encoded_command) 
        temp = '' 
        response = '' 
        while '\r' not in response: 
         response = s.read().decode() 
         temp = temp + response 
        return temp 
    

    그리고는 BTW, 나는 당신이하고 1) 훨씬 느립니다 2) 어떻게 든 포트 가까이 있습니다에 대한 위의 얘기 io.TextIOWrapper 추천을 구현했습니다.

    관련 문제