在远程机器上执行程序 python
execute a program on a remote machine python
我可以使用子进程在本地 python 环境中执行脚本,但由于跨平台问题,我必须在远程服务器上执行它并在我的本地计算机上取回结果。
目录 parserpath 包含一些第三方模块,可以使用存在于 parserpath 目录中的脚本 run.sh 来执行。但是,此 parserpath 目录存在于远程服务器上。
这就是我所拥有的,但这只有在 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)
使用 SSH 密钥自动执行通过 SSH 登录的过程。下面是远程执行脚本的代码。
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
试试,ssh user@host sh path/run.sh
对于大多数 linux shell,您可以 运行 通过执行子 shell 在不同的工作目录中执行命令,如
/home/usr> (cd /usr/local/bin;pwd)
/usr/local/bin
/home/usr>
您可以通过ssh 到远程系统做同样的事情。根据您使用的 ssh 客户端,您可能会稍微精简一下。例如,使用 paramiko
s 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 绑定、pexpect
s ssh 支持等...
我可以使用子进程在本地 python 环境中执行脚本,但由于跨平台问题,我必须在远程服务器上执行它并在我的本地计算机上取回结果。
目录 parserpath 包含一些第三方模块,可以使用存在于 parserpath 目录中的脚本 run.sh 来执行。但是,此 parserpath 目录存在于远程服务器上。 这就是我所拥有的,但这只有在 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)
使用 SSH 密钥自动执行通过 SSH 登录的过程。下面是远程执行脚本的代码。
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
试试,ssh user@host sh path/run.sh
对于大多数 linux shell,您可以 运行 通过执行子 shell 在不同的工作目录中执行命令,如
/home/usr> (cd /usr/local/bin;pwd)
/usr/local/bin
/home/usr>
您可以通过ssh 到远程系统做同样的事情。根据您使用的 ssh 客户端,您可能会稍微精简一下。例如,使用 paramiko
s 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 绑定、pexpect
s ssh 支持等...