7

コンソール アプリの次の行を自動的にインデントしたいのですが、ユーザーはそれを削除できる必要があります。 sys.stdout.write削除できない文字をprint作成すると、sys.stdinに書き込むことができません(私の知る限り)。私は本質的にスマートなインデントを取得しようとしていますが、ネストを深くすることしかできません。登って戻る方法についてのアイデアはありますか?

編集: これは、IronPython を使用する Windows プログラムの一部であることに注意してください。もっと手の込んだことをすることもできますが (将来的にはそうする可能性もあります)、出発点として、ほとんど労力をかけずに、適度に快適な体験をすぐに手に入れたいと思っています。

4

1 に答える 1

1

このcmdモジュールは、プログラムへのコマンド ライン インターフェイスを作成するための非常に単純なインターフェイスを提供します。次の行の前にいくつかのバッファ文字を配置できない場合がありますが、コマンドが戻ったことをユーザーに知らせる明確な方法を探している場合は、各行の先頭にシェルのようなプロンプトを表示できますライン。プログラムに既に関数が定義されている場合、それらをプロセッサに統合するには、関数にアクセスするハンドラーを作成するだけです。

import cmd
import math

def findHpyot(length, height):
    return math.sqrt(length **2 + height **2)

class MathProcessor(cmd.Cmd):
    prompt = "Math>"

    def do_hypot(self, line):
        x = raw_input("Length:")
        y = raw_input("Height:")
        if x and y:
            try:
                hypot = findHypot(float(x), float(y))
                print "Hypot:: %.2f" %hypot
            except ValueError:
                print "Length and Height must be numbers"

    def do_EOF(self, line):
        return True

    def do_exit(self, line):
        return True

    def do_quit(self, line):
        return True

if __name__ == "__main__":
    cmdProcessor = MathProcessor()
    cmdProcessor.cmdloop()

cmd を使用して対話型シェルを作成する際の考慮事項

  1. do_ の後の名前は、ユーザーが使用するコマンドであるため、この例では、使用可能なコマンドは hypot、exit、quit、および help になります。
  2. do_help をオーバーライドせずに help を呼び出すと、使用可能なコマンドのリストが表示されます
  3. プログラムを終了する呼び出しは、True を返す必要があります。
  4. 関数呼び出しからのエントリを処理したい場合、たとえば "hypot 3 4" のような呼び出しを処理できるようにしたい場合は、関数呼び出しでローカル ライン変数を使用できます。
于 2012-11-18T07:11:06.203 に答える