python - 在远程机器上执行python程序

标签 python ssh subprocess cross-platform

我可以使用子进程在本地从 python 环境执行脚本,但由于跨平台问题,我必须在远程服务器上执行它并在本地计算机上获取结果。

目录 parserpath 包含一些第三方模块,可以使用 parserpath 目录中存在的脚本 run.sh 执行这些模块。但是,此解析器路径目录存在于远程服务器上。 这就是我所拥有的,但只有当 parserpath 是本地目录时这才有效。如何 ssh 到远程目录并运行脚本 run.sh?

def run_parser(filename):

     current_dir = os.getcwd()
     parser_path="/parserpath"
     os.chdir(parser_path)
     subprocess.call("./run.sh " + filename, shell=True)
     os.chdir(current_dir)

最佳答案

对于大多数 Linux shell,您可以通过执行子 shell 来在不同的工作目录中运行命令,如下所示

/home/usr> (cd /usr/local/bin;pwd)
/usr/local/bin
/home/usr>

您可以通过 ssh 到远程系统执行相同的操作。根据您使用的 ssh 客户端,您可能会稍微简化一下。例如,使用 paramiko exec_command ,为每个命令创建一个新的远程 shell,因此 cd /path/on/remote/machine;./run.sh就足够了。

Python 2.x 上 paramiko 的极简示例是

import sys
import paramiko

try:
    hostname, username, password, targetpath = sys.argv[1:5]
except ValueError:
    print("Failed, call with hostname username password targetpath")

command = "cd {};pwd".format(targetpath)
print("Command to send: {}".format(command))

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname, username=username, password=password)
stdin, stdout, stderr = ssh.exec_command("cd {};pwd".format(targetpath))
print(stdout.read())
ssh.close()

python3 应该类似。还有其他选项,例如 python 的 libssh2 绑定(bind),pexpect s ssh 支持等...

关于python - 在远程机器上执行python程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851009/

相关文章:

perl - 如何使用Net::OpenSSH安全地写入远程文件

python - Fabric1 env.hosts 和 env.hosts_name 的 fabric2 替代品是什么

python - 为什么以下列表理解在 Python 中不起作用?

python - python 中的 NoneType 错误

git - 无法使用 ssh 连接到 Visual Studio Online git repo

python - 无法在 Django 中使用 Popen 传递服务器密码?

c - 如何从 execl 命令中捕获输出

Python - 使用 Popen 执行具有多个条件的查找

Python Web应用程序项目结构和docker支持

python - Altair Map,是否可以添加 basemap ?