2011-01-23 13 views
0

私は、Pythonのlibに提供Cmdをモジュールを使用する方法を見つけ出すでしたが、私は今、困っています...ここでPythonのインタラクティブCmdを問(3つのパラメータの問題)

はコードです:

def do_addtext(self, file, text = ""): 
     "Add text to the end of a file" 
     if os.path.exists(file) == True: 
      f = open(file, 'a') 
      f.write("\n" + text) 
      print "\n>>> Text added!\n" 
     else: 
      print "\n>>> File do not exists\n" 

2つのパラメータだけの機能を使用しても3つのパラメータで使用できない場合は問題ありません。

だから、「file.txtを作成」などのコマンドラインでfuncionを呼び出すために細かいですが、私はこの1つを使用するカント...「addtext file.txtはsometext」

私はそれがそこに認識していないと仮定3つの異なるフィールドですか?

これに関する助力?

ありがとうございました。

+0

ありがとうございました。私は名前ファイルを変更し、== Trueも削除しました。私はまだコマンドラインを介して動作させるには問題があります..それは第3のパラメータを認識しません。 – PGZ

+0

このコードはどうやって呼びますか? – user225312

+1

この質問は回答できません。この関数がどのように呼び出され、どのような接続がコマンドラインパラメータとどのように関係しているのか、私たちはどのように知っていますか? – SilentGhost

答えて

4

Cmdオブジェクトは入力を解析するときに最初の単語を取り、それを関数名として使用します。残りのテキストは単一のパラメータとして渡されます。 do_ *関数は、selfと入力からの文字列の残りの2つのパラメータだけをとります。だから、場合は、次のように入力します。

> foo This is my text 

プロンプトで、その後、cmdは(「これは私のテキストである」)関数self.do_fooを呼び出そうとします。それはあなたのための分離引数に文字列を分割しません。つまり、self.do_foo( "This"、 "is"、 "my"、 "text")を呼び出すことはありません。

関数がより多くの引数を処理するようにするには、行を自分でもう少し解析する必要があります。今のところ、do_addtextは3つのパラメータを取っています。

また
do_addtext(self, parameter): 
    "Add text to end of file." 
    filename,text = parameter.split(" ", 1) # <--- this does the parsing you wanted Cmd to do 
    if os.path.exists(filename) == True: 
    f = open(filename, 'a') 
    f.write("\n" + text) 
    print "\n>>> Text added!\n" 
    else: 
    print "\n>>> File do not exists\n" 

、このwiki on CmdModuleを参照してください。だから、唯一の2つのパラメータを持っているdo_addtextリライトするようなものを持っているでしょう。 do_xxxメソッドの説明があります。

+0

それは素晴らしいです!仕事はちょうど完璧!どうもありがとうございました! – PGZ