在Paramiko中执行多个命令,以便命令受其前辈的影响

时间:2018-03-26 13:27:12

标签: python shell ssh paramiko

我正在慢慢地尝试将一个python脚本发送到SSH然后FTP来做一些手动文件,我必须一直这样做。我正在使用Paramiko并且会话似乎命令,并打印目录,但我的更改目录命令似乎不起作用,它打印我开始的目录

/ 01 /家庭/

import paramiko

hostname = ''
port = 22
username = ''
password = ''
#selecting PROD instance, changing to data directory, checking directory
command = {
    1:'ORACLE_SID=PROD',2:'cd /01/application/dataload',3:'pwd'
}

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username,password)

for key,value in command.items():
    stdin,stdout,stderr=ssh.exec_command(value)
    outlines=stdout.readlines()
    result=''.join(outlines)
    print (result)
ssh.close()

2 个答案:

答案 0 :(得分:1)

我不小心尝试了一些东西,我设法弄清楚了,我相信。您需要一次执行所有命令,而不需要在循环中执行它们。对于我的实例,它将是

import paramiko

hostname = ''
port = 22
username = ''
password = ''
#selecting PROD instance, changing to data directory, checking directory
command = 'ORACLE_SID=PROD;cd /01/application/dataload;pwd'
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username,password)
stdin,stdout,stderr=ssh.exec_command(value)
outlines=stdout.readlines()
result=''.join(outlines)
print (result)
ssh.close()

答案 1 :(得分:1)

当您多次运行exec_command时,每个命令都在其自己的" shell"中执行。因此,以前的命令对以下命令的环境没有影响。

如果您需要以前的命令来影响以下命令,只需使用适当的服务器shell语法即可。大多数* nix shell使用分号或双符号(具有不同的语义)来指定命令列表。在您的情况下,仅当前面的命令成功时,&符号才更合适,因为它执行以下命令:

stdin,stdout,stderr=ssh.exec_command("ORACLE_SID=PROD && cd /01/application/dataload && pwd")