2013-02-22 102 views
3

我已經用dom生成了一個XML,我想用lxml來打印xml。python lxml與py2exe

這是我的代碼打印這個XML

def prettify_xml(xml_str): 

    import lxml.etree as etree 
    root = etree.fromstring(xml_str) 
    xml_str = etree.tostring(root, pretty_print=True) 

    return xml_str 

我的輸出應該是一個XML格式的字符串。

我從stctoverflow的某篇文章中得到了這段代碼。當我編譯智慧python本身時,這工作完美無瑕。但是,當我在我的項目轉換爲從py2exe創建一個二進制文件(我的二進制是一個namedpipe窗口服務)。我有兩個問題:

  1. 我的服務沒有啓動,我在includes選項添加lxml.etree解決了這個在py2exe函數中。然後在我的服務開始正常。

  2. XML生成在這裏叫的時候,是我在我的日誌 'module' object has no attribute 'fromstring'

我在哪裏可以糾正這個錯誤我看到的錯誤?我的第一個問題的解決方案是否正確?

我的XML生成代碼:

from xml.etree import ElementTree 
from xml.dom import minidom 
from xml.etree.ElementTree import Element, SubElement, tostring, XML 
import lxml.etree 


    def prettify_xml(xml_str): 

     root = lxml.etree.fromstring(xml_str) 
     xml_str = lxml.etree.tostring(root, pretty_print=True) 

     return xml_str 

    def dll_xml(status): 
    try: 
     xml_declaration = '<?xml version="1.0" standalone="no" ?>' 

     rootTagName='response' 
     root = Element(rootTagName) 
     root.set('id' , 'rp001') 

     parent = SubElement(root, 'command', opcode ='-ac') 

     # Create children 
     chdtag1Name = 'mode' 
     chdtag1Value = 'repreport' 

     chdtag2Name='status' 
     chdtag2Value = status 

     fullchildtag1 = ''+chdtag1Name+' value = "'+chdtag1Value+'"' 
     fullchildtag2=''+chdtag2Name+' value="'+chdtag2Value+'"' 

     children = XML('''<root><'''+fullchildtag1+''' /><'''+fullchildtag2+'''/></root> ''') 

     # Add parent 
     parent.extend(children) 
     dll_xml_doc = xml_declaration + tostring(root) 

     dll_xml_doc = prettify_xml(dll_xml_doc) 

     return dll_xml_doc 

    except Exception , error: 
     log.error("xml_generation_failed : %s" % error) 
+0

如果您將導入移動到方法定義之外,是否仍然發生?你確定py2exe使用的是你正在測試的python版本嗎? – 2013-02-22 09:38:48

+0

我試着把功能外的導入。我的服務現在沒有開始。我不妨將我的代碼放在 – rakesh 2013-02-22 09:49:28

+0

@ michael-clerx之上,我查閱了我的python版本和py2exe版本,它們都是相同的類型。 – rakesh 2013-02-22 10:39:54

回答

1

嘗試使用PyInstaller而不是py2exe。我通過運行python pyinstaller.py YourPath\xml_a.py將程序轉換爲二進制.exe,沒有任何問題。