我可以使用子进程从本地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)
答案 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