1. ホーム
  2. python

[解決済み] python: 実行中のプロセスにコンソールをアタッチすることは可能ですか?

2023-06-03 19:04:48

質問

プロセスの状態を見たいのですが、コンソールをプロセスにアタッチして、プロセス内で関数を呼び出したり、グローバル変数のいくつかを見たりすることは可能でしょうか。

プロセスが影響を受けずに実行されている方が良いです(もちろん、パフォーマンスは少し下がりますが)。

どのように解決するのですか?

プログラムのソースコードにアクセスできるのであれば、比較的簡単にこの機能を追加することができます。

参照 レシピ 576515 : Debugging a running python process by interrupting and providing an interactive prompt (Python)

引用すると

<ブロッククオート

このコードは、Pythonの プログラムを 現在の時点で中断され 通常の python の 対話型コンソールで通信することができます。これによって ローカル、グローバル、関連するプログラム の状態を調査することができます。 任意の関数やクラスを呼び出すことができます。 クラスを呼び出すことができます。

使用するために、プロセスは モジュールをインポートし、起動時の任意の時点でlisten() を呼び出します。このプロセスに割り込むには このプロセスに割り込むには、スクリプトを直接実行します。 のプロセス ID をパラメータとして直接実行できます。 をパラメータとして直接実行できます。


ほぼ同じコンセプトの別の実装が、次のように提供されています。 rconsole . ドキュメントから。

rconsole は自動補完機能を持つ Python のリモートコンソールです。 であり、自動補完機能付きです。 を検査し、変更するために使用されます。 実行中のスクリプトの名前空間を調査し、変更するために使用されます。

スクリプトで呼び出すには、次のようにします。

from rfoo.utils import rconsole
rconsole.spawn_server()

<ブロッククオート

シェルからアタッチするには、次のようにします。

$ rconsole

<ブロッククオート

セキュリティ上の注意: rconsole リスナー を起動します。 あらゆるローカル接続を受け入れるので そのため、共有ホスティングや同様の環境で使用するには安全ではありません。 ホスティングなどの環境では安全ではありません!