1

SSH接続を介してリモートPythonインタープリターを制御し、Python自体から駆動できるようにしたいと思います。

基本的なテンプレートがあります。

ssh.connect(servername, serverport, username,  key_filename=key_filename)

transport = ssh.get_transport()
channel = transport.open_session()

channel.exec_command(PATH_TO_EXEC)

while True:
    r, w, e = select.select([channel], [], [], 1)
    if channel in r:
        try:
            if channel.recv_ready():
                x = channel.recv(64)
            elif channel.recv_stderr_ready():
                x = channel.recv_stderr(64)
            else:
                continue

            if len(x) == 0:
                print '\r\n*** EOF\r\n',
                break
            sys.stdout.write(x)
            sys.stdout.flush()
        except socket.timeout:
            pass

これにより、リモートアプリケーションとpdb:で通信できますchannel.set("command\n")

bash、で完全に動作しますが、 (v2)gdbから出力ストリームを取得するために私ができることは何もありませんpython

Pythonはその出力ストリームをどのように処理しますか、なぜ私のコードはそれで動作しませんか?

4

2 に答える 2

2

目標に応じて、これら2つの方法のいずれかに従うことができます(ただし、他にもいくつかの選択肢があると確信しています)。

Pythonを介してリモートマシンでのスクリプトの実行を制御したい場合は、 Fabricを試すことができます。彼らのウェブサイトから:

Fabricは、アプリケーションの展開またはシステム管理タスクでのSSHの使用を合理化するためのPython(2.5以降)ライブラリおよびコマンドラインツールです。ローカルまたはリモートシェルコマンド(通常またはsudo経由)を実行し、ファイルをアップロード/ダウンロードするための基本的な一連の操作と、実行中のユーザーに入力を求める、実行を中止するなどの補助機能を提供します。

リモートプロセスを制御し、それらの出力をメインプログラムのフローに統合する場合は、マルチプロセッシングモジュールを使用できます。PEP 371から:

このパッケージは、サーバーとクライアントの機能(processing.Manager)も提供し、オブジェクトとタスクのリモート共有と管理を提供します。これにより、アプリケーションはローカルマシン上の複数のコアを活用できるだけでなく、ネットワーク化されたマシンのクラスター全体にオブジェクトとタスクを分散できます。

于 2011-07-05T14:32:27.390 に答える
2

これが学術的な演習である場合、またはsshを使用するための特定の要件がない場合は、pushyを参照してください。私はそれを使ったことがありませんが、それは成熟しているようです。

于 2011-07-05T14:34:13.557 に答える