将输出写入XML解析器中动态创建的文件

时间:2016-06-13 09:19:54

标签: python sax

我想从另一个python脚本文件中调用这个python脚本。生成的输出需要写入作为参数传递的文件。我怎么能这样做?我是一名初学者,非常感谢细节。感谢。

PS:问题不在于写入文件,而是将输出文件的名称作为参数传递并写入THAT fille。

以下是代码:

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # Call when an element starts
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # Call when an elements ends
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         print "Year:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""

   # Call when a character is read
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content

if ( __name__ == "__main__"):

   # create an XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # override the default ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )

   parser.parse("movies.xml")

我试图将__init__功能修改为

def __init__(self, output_file):
    ----do something----

并将输出文件作为争论传递。

然后将脚本调用为系统调用,如下所示:

os.system("script.py" "output_file")

我宁愿拥有全局变量或返回语句,然后处理它并写入执行系统调用的文件。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

You can import sys module and use it.
sys.argv[] holds the command line arguments passed to the python interpreter.
sys.argv[0] is your python file name.
sys.argv[1] is the path to the output file you want to write.
From the main method you can pass this sys.argv[1] to class MovieHandler.

Below is the sample to how to call the python file from other python script and also how to pass the command line argument:

From the other file to call your python script:

import os, sys
os.system("python /pathto/script.py /pathto/output_file")

In your python script:
class MovieHandler:
    def __init__(self, outputfile):
        self.outputfile = outputfile
if __name__ == "__main__":
    movieHandlerObj = MovieHandler(sys.argv[1])