在远程机器python

时间:2015-11-22 02:31:48

标签: python ssh subprocess cross-platform

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

目录解析器路径包含一些第三方模块,可以使用解析器路径目录中的脚本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)

3 个答案:

答案 0 :(得分:4)

对于大多数Linux shell,您可以通过执行

中的子shell在不同的工作目录中运行命令
paramiko

你可以通过ssh到远程系统做同样的事情。根据您使用的ssh客户端,您可能会稍微减少一点。例如,使用exec_command s cd /path/on/remote/machine;./run.sh,会为每个命令创建一个新的远程shell,因此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() 就足够了。

python 2.x上paramiko的极简主义例子是

pexpect

python3应该是类似的。还有其他选项,如libssh2绑定python,{{1}} ssh支持等...

答案 1 :(得分:1)

使用SSH密钥自动执行通过SSH登录的过程。以下是远程执行脚本的代码。

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)

答案 2 :(得分:0)

尝试,ssh user @ host sh path / run.sh