Repl/CLIをバックグラウンドで起動し、コマンドをフィードする

Repl/CLIをバックグラウンドで起動し、コマンドをフィードする

replpythonの起動に時間がかかるとします。エイリアスを作成して、次のようなコマンドを入力できるように、バックグラウンドで起動する方法はありますかpython-current "command to run"

答え1

'バッテリー付属' にもかかわらず、Python ディストリビューションにはこの種のオープニングを行うものは何もありません。

エディターなどのプログラムがそのようなことを処理できるのは、別のファイルを開いたときに何をすればよいかが非常に明確だからです。つまり、同じ実行可能ファイルによって処理される新しいファイルでウィンドウ/タブを開くだけです。

そのようなものを自分で実装するのはそれほど難しくありませんが、最初のコマンドがまだ完了しておらず、2 番目のコマンドがスケジュールされている場合に何が起こるかを考える必要があります。

  • 最初のコマンドを中止する
  • 2番目のコマンドをキューに入れる
  • 並列に実行する(コマンドを待機している複数のスレッドがない限り、追加の起動時間が必要になります)

私は、スキャンされたディレクトリ内のファイル、HTTP リクエスト (Twisted ベースのシステム上)、および zeromq に基づいてモジュールをロードして実行するように、実行中の Python に通知しました。何が適切かは、システムで他に何が必要かによって決まりますが、私は常に、機能し、オーバーヘッドが最も少ないものを選択します。python-current適切なインターフェイスを行う必要があります。

多くの場合、これは特定のモジュールの再ロードと組み合わされます (新しいコマンドの処理を取得するため)。そのためには、reload()組み込みを使用できます。

import mycommand
# test for a command that requires reloading
reload(mycommand)


余談ですが、特に UI コードを使用する場合、この再読み込みが便利だと感じました。Python による実行可能ファイルの読み込みは Perl と同等です (数年前のシステムでは 0.002 秒time python -v)。基本モジュールの読み込みには約 10 倍の時間がかかります ( time python -c "exit();", 0.025s). But when using UI based programs the whole startup easily grows to several seconds and more. And in that case implementing dynamic command reading and having apython-current` が理にかなっています)。

答え2

使用する場合はbash試してみてくださいコプロセスKshにはコプロセス、この分野で両方のシェルが同等の機能を持っているかどうかはわかりません。私は Ksh バージョンのみを試しました (私の雇用主は klunk を好んでいるため、Ksh を使用しました)。動作しましたが、1 つ以上のコプロセスを持つことは簡単ではありませんでした。

Google で「ksh coprocess の例」または「bash coprocess の例」を検索すると、サンプル コードが見つかります。全体的に非常に直感的ではないため、例を参考にしてください。

関連情報