我正在 Windows 计算机上运行 python 脚本,以调用远程 Linux 计算机上的另一个 python 脚本。我使用 subprocess.call 和 ssh 来执行此操作,如下所示:
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 命令拆分为列表并传递。没有帮助。
我尝试通过 subprocess.call()
运行其他“本地”(Windows)命令并尝试设置环境。效果很好。
我尝试在远程 Linux 机器上运行其他命令(例如 ls
)。再次,subprocess.call()
只要我不尝试设置环境,就可以正常工作。
我做错了什么?我可以在远程计算机上设置 python 脚本的环境吗?任何帮助将不胜感激。
最佳答案
要在远程端设置环境,您需要在远程端进行调用。尝试编写并上传执行此环境设置的包装器脚本,例如
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))
或者一些将字典转换为所需格式的更可扩展的方法。
关于python - 通过 subprocess.call 设置 env 以在远程 Linux 计算机上运行 python 脚本时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13203984/