J'ai un bug vraiment étrange que je n'ai pas réussi à résoudre. Je réduit mon code à la quantité minimale pour reproduire le problème:Comportement étrange dans la redirection de Python via le sous-processus
from lxml import etree
xsd_prs = etree.XMLParser(remove_blank_text=True)
print "**", xsd_prs
La commande J'exécute ressemble:
cmd = 'python myprog.py -f myfile.xsd > out.txt 2>&1'
Quand je lance ce billet depuis la ligne de commande, je reçois ce que je pense à out.txt
:
** <lxml.etree.XMLParser object at 0x10b0fd550>
Cependant, quand je lance ce à partir d'une application Web Python/base de bouteille en utilisant les éléments suivants:
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
pro.wait()
Ici, la fonction etree.XMLParser()
ne renvoie rien. Je viens d'obtenir ce qui suit dans le fichier out.txt
:
**
Je dois aussi mentionner que j'utilise ce même subprocess.Popen()
approche pour exécuter toutes sortes de commandes sans faute, à l'exception de celui-ci. Pourquoi la représentation sous forme de chaîne de l'objet n'est-elle pas générée?
J'ai aussi essayé la même chose en utilisant un analyseur XML intégré dans Python:
import xml.etree.ElementTree as ET
tree = ET.parse(fn)
doc = tree.getroot()
print "***", doc
obtenir un résultat similaire lors de l'exécution de la ligne de commande:
*** <Element '{http://www.w3.org/2001/XMLSchema}schema' at 0x115675f90>
par rapport à l'exécution de l'application Web:
***