문제

CLI 프로그램을 시작하기 위해 pexpect를 사용하는 스크립트가 있습니다. 명령을 입력 할 수있는 프롬프트를 얻는 쉘처럼 작동합니다.

제가 가진 문제는이 프로그램이 컬러 프롬프트를 사용한다는 것입니다.

이것이 제가하는 것입니다

import pprint
import pexpect

1 a = pexpect.spawn('program')
2 a.expect("prompt>")
3 print "---------start------------"
4 print(a.before)
5 a.sendline("command")
6 a.expect("prompt>")
7 print "---------before------------"
8 pprint.pprint(a.before)
9 print "---------after------------"
10 pprint.pprint(a.after)

이것은 출력입니다.

> python borken.py
---------start------------
A lot of text here from the enjoying programs start-up, lorem ipsum ...  
---------before------------
' \x1b[0m\x1b[8D\x1b[K\x1b[1m\x1b[34m'
---------after------------
'prompt>'

어떤 이유로 든 첫 번째 프롬프트 컬러 코딩은 Borkens Up Things와 A. 이전 8 번의 명령이 실제로 많은 출력을 생성 했음에도 불구하고 일반 인쇄는 작동하지 않습니다.

누군가 문제가 무엇인지 알고 있습니까, 아니면 색상을 피하기 위해 Pexpect에서 터미널 유형을 설정할 수 있습니까?

TCSH 쉘을 사용하고 있습니다

도움이 되었습니까?

해결책

좋아, 나는 대답을 찾았다. CSL의 답변은 나를 올바른 길로 설정했습니다.

pexpect에는 내가 사용할 수 있다고 생각한 "ENV"옵션이 있습니다. 이와 같이:

a = pexpect.spawn('program', env = {"TERM": "dumb"})

그러나 이것은 나에게 효과가없는 새로운 쉘을 생성합니다. 우리의 개발 환경은 많은 환경 변수에 달려 있습니다 :/

그러나 껍질을 낳기 전에이 작업을 수행하면 :

import os
os.environ["TERM"] = "dumb"

현재 "용어"와 "멍청한"을 변경하여 색상을 지원하지 않아 문제가 해결되었습니다.

다른 팁

아무것도 찾을 수 없었습니다 pexpect 문서 터미널을 설정하려면 쉘로 명시 적으로 프로그램을 시작한 다음 터미널 유형을 설정할 수 있습니다.

shell_cmd = 'ls -l | grep LOG > log_list.txt'
child = pexpect.spawn('/bin/bash', ['-c', shell_cmd])
child.expect(pexpect.EOF)

당신은 같은 것을 시도 할 수 있습니다

child = pexpect.spawn('TERM=vt100 /bin/bash', ['-c', shell_cmd])

초기화 파일을 읽지 않기 위해 -norc 및 유사한 BASH를 시작할 수도 있습니다. 확인하십시오 배쉬 맨 페이지.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top