2012-03-27 11 views
1

Ich bin völlig neu in Python, und jetzt muss ich ein Skript ändern, so dass es ein anderes Programm aufruft und es ausgegeben bekommt. Ich habe recherchiert und alle Lösungen weisen auf so etwas wieKorrekte Verwendung von Popen in Python oder etwas Ähnliches

p = sub.Popen('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}', shell=True,stdout=sub.PIPE,stderr=sub.PIPE) 
out,err=p.communicate() 
print out 

aber ich konnte nicht bekommen zu arbeiten. "Ausdruck" druckt nichts aus.

Ich hatte es mit

Arbeits
os.system('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}') 

aber auf diese Weise kann ich nicht die Ausgabe von morphg bekommen.

Auch ich verstehe nicht genau, was der zweite Teil bedeutet, aber ich weiß, dass es das Programm korrekt aufruft. Nur dass die Ausgabe zu stdin ist, und ich brauche sie in einer Variablen.

Irgendwelche Hilfe?

P.S .: subprocess.check_output ist keine Option, da ich Python 2.6 habe.

+1

Es ist generell eine schlechte Idee sein, als die Verwendung von „shell = True“ und Befehlsfolgen zu Popen (aus dem gleichen Grund, dass die Verwendung von os.system() übergeben und die ältere popen *() - Funktionen werden nicht empfohlen, da es eine Anzahl von '(back tick) und $() (Befehlsersetzung) und anderen Strings gibt, die in einen Befehl interpoliert werden können, um unbeabsichtigte Konsequenzen zu verursachen). Es ist am besten, shell = False (die Standardeinstellung) zu belassen und eine Liste (Vektor) zu übergeben: ['echo', s] --- obwohl Sie dann mehrere Prozesse einrichten und die Pipes für dieses Beispiel selbst anordnen müssen. –

+0

Ich hatte das gelesen, aber ich habe keine Ahnung, wie das geht. = P – elithin

Antwort

0

try this:

import os 
p = os.popen('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}') 
out = p.read() 
print out 
+0

funktioniert super danke !! – elithin

+0

froh, dass ich helfen konnte! :) –

Verwandte Themen