>  기사  >  백엔드 개발  >  Paramiko를 사용하여 원격 SSH CLI 출력에서 ​​정크 값을 처리하는 방법은 무엇입니까?

Paramiko를 사용하여 원격 SSH CLI 출력에서 ​​정크 값을 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-19 07:08:31382검색

How to Deal with Junk Values in Remote SSH CLI Output with Paramiko?

Paramiko를 통해 원격 SSH CLI 출력의 정크 값 처리

Python의 Paramiko 라이브러리를 사용하여 SSH 연결 및 원격 시스템의 출력 검색을 수행하는 동안 CLI를 사용하면 사용자가 원하는 출력에 원치 않는 정크 값이 산재되어 있는 것을 발견할 수 있습니다. 종종 "x1b[2Jx1b[1;1H")와 같은 ANSI 이스케이프 코드 형태의 이러한 값은 출력을 복잡하게 만들고 유용성을 방해할 수 있습니다.

정크 값의 소스 이해

정크라는 가정과 달리 이러한 이스케이프 코드는 터미널 환경에서 올바른 출력 표시에 필수적입니다. 텍스트 서식 지정 방법, 커서 이동 방법 등에 대한 지침을 터미널에 제공합니다. 그러나 대화형 터미널을 사용하지 않는 경우 이러한 코드는 문제가 될 수 있습니다.

해결책: 대화형으로 명령 실행

기본적으로 Paramiko의 SSHClient.invoke_shell 메소드는 이스케이프 코드를 포함시키는 대화형 터미널 세션입니다. 이를 제거하려면 의사 터미널 없이 명령을 실행하는 exec_command 메소드로 전환하십시오(명시적으로 활성화하지 않는 한):

<code class="python">stdin, stdout, stderr = client.exec_command('ls')</code>

대체 솔루션

어떤 이유로든 "쉘" 채널을 사용해야 하는 경우 의사 터미널 없이 수동으로 만들 수 있습니다. 또한 다음 해결 방법을 사용하여 문자열 출력에서 ​​이스케이프 시퀀스를 제거할 수 있습니다.

<code class="python">import re
output = re.sub(r'(\x1b\[.*?m)', '', output)</code>

출력 인코딩 디코딩

앞에 있는 "u" 문자에 유의하세요. 질문의 문자열 출력은 유니코드 인코딩을 나타냅니다. 이는 출력에서 ​​ASCII가 아닌 문자를 처리하는 데 필요합니다.

위 내용은 Paramiko를 사용하여 원격 SSH CLI 출력에서 ​​정크 값을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.