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

要在远程端设置环境,您需要在远程端进行调用。尝试编写并上传执行此环境设置的包装脚本,例如

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))

或者将字典转换为所需格式的一些更可扩展的方法。

于 2012-11-02T22:59:01.000 回答