1

WindowsマシンでPythonスクリプトを実行して、リモートLinuxマシンで別のPythonスクリプトを呼び出しています。以下のように、sshでsubprocess.callを使用してこれを実行しています subprocess.call('ssh -i <identify file> username@hostname python <script_on_linux_machine>')。これは正常に機能します。

ただし、以下のようにいくつかの環境変数を設定したい場合は、 subprocess.call('ssh -i <identify file> username@hostname python <script_on_linux_machine>', env={key1:value1})失敗します。次のエラーが発生します。 ssh_connect: getnameinfo failed ssh: connect to host <hostname> port 22: Operation not permitted 255

sshコマンドをリストに分割して渡すことを試みました。助けにはならなかった。他の「ローカル」(Windows)コマンドを実行subprocess.call()して、環境を設定しようとしました。正常に動作します。lsリモートLinuxマシンで他のコマンド(など)を実行しようとしました。繰り返しsubprocess.call()ますが、環境を設定しようとしない限り、正常に動作します。

私は何が間違っているのですか?リモートマシンでPythonスクリプトの環境を設定できますか?どんな助けでもありがたいです。

4

1 に答える 1

2

リモート側で環境を設定するには、リモート側で通話を行う必要があります。このenv設定を行うラッパースクリプトを作成してアップロードしてみてください。

import subprocess
import sys


args = sys.argv[1:]
env = dict(zip(args[::2], args[1::2]))

subprocess.call(['python', 'script.py'], env=env)

これで、元の通話でこの情報を渡す必要があります。たとえば、

subprocess.call('ssh -i <identify file> username@hostname '
                'python <script_on_linux_machine> %s %s' % (key, value))

または、dictを必要な形式に変換するためのより拡張可能な方法。

于 2012-11-02T22:59:01.000 に答える