2016-06-13 1 views
0

このpythonスクリプトを別のpythonスクリプトファイルから呼び出すとします。生成される出力は、パラメータとして渡されるファイルに書き込まれる必要があります。どうすればいい?私は初心者であり、軽微な細部に感謝します。ありがとう。XMLパーサから動的に作成されたファイルに出力を書き込む

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

私は

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

として__init__functionを変更し、arguementとして出力ファイルを渡すことを試みました。

して、以下のようにシステムコールとしてスクリプトを呼び出す:私はむしろグローバル変数を持っているか、return文、その後、これを処理し、システムコールを行うファイルに書き込みます

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

。どうすればいい?

+0

あなたはfd = open(output_file、 "a")、fd.write(string_to _write)のようなファイルに内容を書き込むために単純な文字列とファイル書き込みを使用してから、ファイルポインタをフラッシュして閉じるそれ。あなたのコンテンツはファイルに書き込まれます。 – sagar

+0

@sagar、私は引数として出力ファイルの名前を渡す必要があります。それが私の問題です。 – RowenaRavenclaw

+0

問題ありませんsys.argv [0]はあなたのpythonファイル名です、sys.argv [1]はあなたが渡す引数です。 sysモジュールを使用できるかどうかを確認してください。 import sys、sys.argv [1]はPythonファイルの第1引数です。例: "python script.py path_to_output_file"そしてsys.argv [1]はpath_to_output_fileです。したがって、 "class MovieHandler"では、__ init __(self、outputfile) - > self.outputfile = outputfileのようなクラス変数を初期化します。 – sagar

答えて

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]) 
関連する問題