2016-11-24 6 views
2

현재 프로그램에서 작업하고 있는데, pexpect를 통해 자식 저장소를 제어해야합니다.pexpect로 힘내 명령 : 터미널 기능이 완벽하지 않습니다.

git status과 같은 간단한 명령이 작동하지만 git diff --name-status ...과 같은 명령은 작동하지 않습니다. 다음과 같은 오류 메시지가 나타납니다 : WARNING: terminal is not fully functional.

내가 발견 한 모든 해결책은 Windows 또는 Mac에서 문제를 해결하는 것이 었습니다.

는 Heres는 내 프로그램에서 codesnippet는 :

my_bash = pexpect.spawn('/bin/bash', cwd="/home/xxx/clone_repo/local.repo/") 
my_bash.logfile = sys.stdout 
my_bash.sendline(git diff --name-status branch1 branch2) 

누군가는이 문제에 대한 해결책을 알고 있나요? 예를 들어 pexpect를보다 기능적인 터미널로 실행할 수 있습니까?

인사 조니

답변

2

나는 다음과 같은 오류 메시지가 : 경고 : 터미널이 완전히 작동하지 않습니다.

경고입니다. 오류가 아닙니다.

예를 들어보다 기능적인 터미널로 pexpect를 실행할 수 있습니까? 당신은 할 수

당신이 인간이에 상호 작용처럼 행동해야한다 테스트를 작성하지 않는 한 (참조, 예를 들어, https://github.com/docker/docker/issues/8631, 그것은 당신이 OS 환경과 같은 세부 사항을 언급 중요 참고 난 그냥 여기 추측 오전) -하지만 터미널, 귀찮게해서는 안됩니다. 프로그램에서 힘내를 키우려면 프로그램 중심으로 구동되는 힘내 부분을 사용하십시오. 이 작업을 수행 할 수

my_bash = pexpect.spawn('/bin/bash', cwd="/home/xxx/clone_repo/local.repo/") 
my_bash.logfile = sys.stdout 
my_bash.sendline('git diff --name-status branch1 branch2') 

:

proc = subprocess.Popen(['git', 'diff-tree', '-r', 
         '--name-status', 'branch1', 'branch2'], 
         shell=False, cwd='/home/xxx/clone_repo/local.repo') 

out, err = proc.communicate() 
status = proc.wait() 

를 한 다음이의 결과로 작업 대신 git diff의 예를 들어, git diff-tree를 실행합니다. 프로그램을 직접 제어 할 수 있고 "배관 명령"인 git diff-tree을 사용하면 기계가 읽을 수 있도록 설계된 출력을 얻을 수 있습니다. Which are the plumbing and porcelain commands?

참조 (당신은 또한 일반적인 보안 문제를 방지 shell=False를 사용하여.)

+0

는 귀하의 회신을 위해 대단히 감사합니다! 내가 diff-tree를 통해 필요한 모든 것을 얻을 수 있는지 알게 될 것이다. – JohnnyKonfetti