2014-07-25 9 views
0

기본적으로 파이썬과 SCons SConstruct 스크립트에서 ct-ng (http://crosstool-ng.org/)를 호출하려고합니다.파이썬 subprocess.call()을 사용하여 ncurses 프로세스 실행

다음 방법을 사용하여 다음

ret = subprocess.call(["/mnt/build/pw_build/crosstool-ng/bin/ct-ng menuconfig"], env=env_cross,shell=True) 

crosstool-NG는 메뉴를 사용자에게 제시의 ncurses를 사용

enter image description here

불행히도 메뉴를 탐색 할 때 알겠습니다 :

내가 볼 화살표 키를 사용할 때 순서를 표시하는 고양이를 사용하여

enter image description here

는 : 뭔가 가능성이 순서에서 이스케이프 문자를 제거처럼

:/mnt/build$ cat > /dev/null 
^[OA^[OD^[OB^[OC^[OA^[OB^[OD^[OC^[OA^[OB 

보인다.

올바르게 터미널에서 명령 줄에서 ct-ng 스크립트를 호출 할 때 subprocess.call()을 사용하여 호출 할 때 문제가 발생합니다.

  • 들어 xfce4-터미널 0.6.3
  • 리눅스 3.13.0-32 - lowlatency 번호 57 - 우분투 SMP 선점 화 7월 15일 4시 8분 59초 UTC :

    내 환경 구성 2014 x86_64에의 x86_64에의 x86_64의 GNU/리눅스

  • 파이썬 2.7.6
  • NCURSES_VERSION "5.9"
  • GNU는 확인 3.81
  • 크로스 스툴 -NG 버전 1.19.0

알려진 문제가 무엇인가요? 내가해야 할 일이 있니?

UPDATE : 감사 에릭 .. 그 날 내가 지금 메뉴를 탐색 할 수 있습니다 .. 방법이 0.5F하지만 여전히 뒤에 배설물 잎 가지고 :

enter image description here

+0

귀하의 셸이 내가 입력 한 키 입력을 해석하고 있습니다. "stty raw, crosstool thingie, stty cooked"를 시도하십시오. Raw는 너무 심할 수도 있지만 문제의 원인을 확인할 수 있습니다. – Eric

+0

OK ... "stty -echo"(원시 대신) 시도 – Eric

+0

현재 -echo의 사랑이 없으며 현재 stty와 약간의 변형을 시도하고 있습니다 ... –

답변

1

파이썬에서 curses 프로그램을 실행하려면 pexpect을 사용하는 것이 좋습니다.

예를 들어 여기에 vim 사본을 시작하고, 텍스트를 추가하고, 명령 모드로 이스케이프 처리하고, : w 명령을 실행 한 다음 사용자와 상호 작용하여 편집을 계속할 수있는 간단한 프로그램이 있습니다.그런 다음 컨트롤이 파이썬으로 반환됩니다.

#!/usr/bin/env python 
import pexpect 
child = pexpect.spawn("/usr/bin/vim") 
child.send('a\n\nThis is another test.') 
child.send('\x1b') 
child.send(':w! test.txt\n') 
child.interact() 

입력 및 출력을위한 이스케이프 문자 및 필터 함수를 interact 메서드에 전달할 수도 있습니다. 하지만 그것들은 조금 까다 롭습니다.

(BTW :이 ct-ng 대화 상자/메뉴에 원하는 키 시퀀스를 보낼 수 있습니다 ... 터미널 설정에 필요한 시퀀스가 ​​무엇인지 파악하는 것입니다. 예를 들어 MacOS X TERM = xterm-256color로 실행하면^[[B] ([Esc] [Bracket] [B])로 커서 움직임이 나오는데, '\ x1b [B'는 파이썬 문자열 리터럴이됩니다.

0

이 된 실행의주의 깊은 추적 후 문제를 봤던 모든 사람 덕분에 문제를 일으킨 티에 리디렉션하는 스크립트는 처음에는 소음에 대해 유감을 표해야했습니다.