2016-11-24 2 views
2

Ich arbeite gerade an einem Programm, das ein Git-Repository durch Pexpect steuern soll.Git Befehle mit Pexpect: Terminal nicht voll funktionsfähig

Einfache Befehle wie git status funktionieren, aber Befehle wie nicht. Ich erhalte die folgende Fehlermeldung: WARNING: terminal is not fully functional.

Alle Lösungen, die ich gefunden habe, sollten das Problem auf Windows oder Mac beheben.

Heres ein CodeSnippet von meinem Programm:

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) 

Kennt jemand eine Lösung für dieses Problem? Kann ich Pexpect zum Beispiel mit einem funktionaleren Terminal betreiben?

Grüße Johnny

Antwort

2

bekomme ich folgende Fehlermeldung: Warnung: Klemme nicht voll funktionsfähig ist.

Das ist eine Warnung, kein Fehler.

Kann ich pexpect zum Beispiel mit einem funktionaleren Terminal betreiben?

Sie könnten (siehe zB https://github.com/docker/docker/issues/8631; beachten Sie, dass es wichtig ist, dass Sie Details wie OS und Umgebung erwähnen, ich bin zu raten, nur hier) -aber es sei denn, Sie Tests schreiben, die wie ein Mensch die Interaktion auf verhalten müssen ein Terminal, sollte man nicht stören. Verwenden Sie die Teile von Git, die programmiert werden sollen, um Git von Programmen zu steuern. Statt git diff laufen git diff-tree, zum Beispiel:

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') 

Sie dies tun können:

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() 

und dann mit den Ergebnissen dieser Arbeit. Sie erhalten eine direktere Kontrolle über das Programm, und durch Verwendung von git diff-tree, einem "plumbing command", erhalten Sie eine Ausgabe, die maschinenlesbar ist. Siehe Which are the plumbing and porcelain commands?

(von shell=False verwenden Sie auch Schutz gegen eine gemeinsame Sicherheitsproblem.)

+0

Ihre für Ihre Antwort sehr vielen Dank! Ich werde sehen, ob ich alles, was ich brauche, durch Diff-Tree bekommen kann. – JohnnyKonfetti

Verwandte Themen