2016-04-10 3 views
1

Python Cmd2モジュール(Cmdから継承)を使用して、プログラム用のMyCmd CLIを作成します。ほとんどの場合、私はスクリプトを通常組み込みコマンドと共に使用しています。 'quit'コマンドは、スクリプトのクリーンアップを行い、その後終了するように実装されています。 Cmd2モジュールは、raw_inputを介して入力を待機します。プログラムでPython Cmdのcmdloopにコマンドを注入

具体的には、コマンドラインでプログラムを発行する代わりに、プログラムで「quit」を呼び出す必要があります。これは、REST APIがスクリプトのメインスレッドでquitを呼び出すために 'quit' POSTを変換する別のスレッドを介して行われます。

似たようなことをしたいが、正確にはそうではない、いくつかの質問があります。私は以下の例に従おうとしましたが、うまくいきませんでした。 Python StringIO - selectively place data into stdin

私は単純なものを試しました。基本的にはスレッドから以下でした:

sys.stdin = StringIO('quit\n') 
sys.stdin.flush() 

言葉が「やめ」を注入したが、スクリプトはそのクリーン終了しないだろうと思われます。しかし、私はコマンドラインに戻って、単純にEnterを押して、クリーンアップと終了プロセスをトリガーします。なぜ '\ n'がEnterとして解釈されていないのか分かりません。

私のCMDは、単純に以下の方法で呼び出されます。

mycmd = MyCmd() 
mycmd.cmdloop() 

にはどうすれば適切にCmdをのcmdloopに「終了」を注入することができますか?

+0

['Cmd.postcmd'](https://docs.python.org/2/library/cmd.html#cmd.Cmd.postcmd)をオーバーライドすることは可能でしょうか? –

+0

私が知る限り、cmdloopの外で呼び出されるため、メソッドを直接呼び出すことはできません。したがって、True(cmdloopを終了する)の戻り値は、cmdloopの外部で実行される呼び出しコードではなく、cmdloopに渡されます。 – bhairav

答えて

0

cmd.onecmd( "quit")メソッドを試したことがありますか?私はそれをインタプリタにコマンドを注入するのに使うことができると思います。

関連する問題