python - 通过 subprocess.call 设置 env 以在远程 Linux 计算机上运行 python 脚本时出错

标签 python ssh subprocess env

我正在 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/

相关文章:

python - 如何将 matplotlib 图导出为带有可编辑文本字段的矢量图形?

python - 如何将 pip/pypi 安装的 python 包转换为 zip 文件以在 AWS Glue 中使用

python - 如何知道安装的pylab版本?

linux - chmod 排除

ios - 通过 NMSSH 的数据流

相当于在 Windows 中双击的 Python 子进程模块

python - 在带有子进程的 python 中运行 find 命令时出现问题

python - ZeroMQ收不到消息怎么办?

linux - scp作为后台工作?

python - 是否可以在Python中复制一个管道,使其具有一个写入端和两个读取端?