我正在慢慢地尝试将一个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()
答案 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")