Ich habe einen wirklich seltsamen Fehler, den ich nicht lösen konnte. Ich habe meinen Code auf die minimale Menge minimiert das Problem zu reproduzieren:Seltsames Verhalten in Python-Umleitung über Subprozess
from lxml import etree
xsd_prs = etree.XMLParser(remove_blank_text=True)
print "**", xsd_prs
Der Befehl I sieht ausführen wie:
cmd = 'python myprog.py -f myfile.xsd > out.txt 2>&1'
Wenn ich dies von der Kommandozeile ausführen ich bekommen, was ich in out.txt
erwarten :
** <lxml.etree.XMLParser object at 0x10b0fd550>
Allerdings, wenn ich dies aus einem Python/Bottle-basierte Web-Anwendung den folgenden verwenden:
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
pro.wait()
Hier, etree.XMLParser()
Funktion gibt nichts zurück. Bekomme ich nur die folgenden in der out.txt
Datei:
**
ich auch erwähnen sollte, dass ich diesen gleichen subprocess.Popen()
Ansatz wurde mit allen Arten von verschiedenen Befehle auszuführen, ohne scheitern, mit Ausnahme von dieser. Warum wird die String-Darstellung des Objekts nicht ausgegeben?
Ich habe auch versucht, die gleiche Sache mit Python integrierten XML-Parser:
import xml.etree.ElementTree as ET
tree = ET.parse(fn)
doc = tree.getroot()
print "***", doc
ähnliches Ergebnis erhalten, sobald eine von der Kommandozeile ausgeführt wird:
*** <Element '{http://www.w3.org/2001/XMLSchema}schema' at 0x115675f90>
im Vergleich zu laufen von Web-Anwendung:
***