2017-07-05 1 views
1

Ich muss farbige Diff von zwei Textdateien auf Linux aus meinem Python-Skript, für die ich vimdiff benutze. Ich bin in der Lage, vimdiff unter Verwendung des Unterprozesses zu laufen, aber ich kann Kontrolle nicht zurück zum Pythonskript erhalten. Es bleibt für immer im vimdiff-Modus, bis ich Strg + Z mache. Was ich tun möchte, ist, dass öffnen Sie Vimdiff und zurück zum Python-Skript nach dem Empfang einer Art von Eingabe über die Tastatur. Ich habe Signalmodul auch versucht, aber konnte das Problem nicht lösen.Ausführen eines Linux-Subprozesses in Python-Skript

Ich bin ein Anfänger in Python so weit, was habe ich versucht, ist hier:

import subprocess 
p = subprocess.Popen(["vimdiff","test1.txt", "test2.txt"]) 
try: 
p.wait() 
except KeyboardInterrupt: 
p.kill() 

Jede Hilfe wird

+0

Was passiert, wenn Sie ': aus vim q'? – NPE

+0

@NPE Es sagt immer noch im vim-Modus, aber ich sehe die Dateien in schwarz und weiß, statt Farbe. – user12083

+0

Was ist mit 'qa!', Bleibt es noch in vim? – dlmeetei

Antwort

0

geschätzt werden, wie ich bekannt vim ncurses-Bibliothek verwendet. Für Lauf ncurses Anwendung Verwendung Modul basiert pexpect:

import pexpect 
child = pexpect.spawn("vim") 
child.interact() 
+0

Erkläre, warum dies notwendig ist. –

+0

@Linch können Sie etwas mehr erklären, was zu erwarten ist, nachdem vimdiff Befehl ausgeführt wird, wie es im Vim-Modus bleibt. – user12083

0

vim ist ein Volltextmodus-Programm Bildschirm, der Tricks mit Bildschirm tut. Vermeiden Sie, den Eingang/Ausgang zu verlegen. Besser laufen

subprocess.call(["vimdiff", "test1.txt", "test2.txt"]) 

oder einfach

os.system("vimdiff test1.txt test2.txt") 
+0

Danke für die Antwort. Ich habe das ausprobiert, aber das Problem bleibt bestehen, weil ich von vimdiff aus meinem Skript nicht ohne Strg + Z beenden kann. – user12083

Verwandte Themen