0

I want to call this python script from another python script file. The output generated needs to be written to a file that is passed as a parameter. How could I do that? I'm a beginner and would appreciate the minor details. Thanks.

PS: the problem is not writing to the file, but to pass the name of the output file as an argument and write to THAT fille.

Here is the code:

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")

I have tried to modify the __init__function as

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

and pass the output file as an arguement.

and then call the script as a system call as below:

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

I would rather have global variables or return statements and then process that and write to a file that do the system call. How could I do that?

5
  • you can use simple string and file write to write the content to a file.its like fd = open(output_file, "a") , fd.write(string_to _write), then flush the file pointer and close it. Your content will be written to the file. Commented Jun 13, 2016 at 9:45
  • @sagar, I need to pass the name of the output file as an argument. That is where my problem is. Commented Jun 13, 2016 at 9:46
  • No problem sys.argv[0] is your python file name, sys.argv[1] is the argument that you will pass. See you can use sys module. like : import sys, sys.argv[1] is your 1st argument to python file. Ex: "python script.py path_to_output_file" then sys.argv[1] is path_to_output_file. So in "class MovieHandler" __init__(self, outputfile) -> initialize a class variable like self.outputfile = outputfile. Commented Jun 13, 2016 at 9:50
  • @sagar, how do i call it from another python script? Commented Jun 13, 2016 at 10:00
  • os.system("python /pathto/script.py /pathto/output_file") Commented Jun 13, 2016 at 10:46

1 Answer 1

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])
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.