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

Python 在Paramiko中执行多个命令,以便命令受其前辈的影响,python,shell,ssh,paramiko,Python,Shell,Ssh,Paramiko,我正在慢慢地尝试制作一个python脚本到SSH,然后FTP来做一些手动文件获取,我一直都在做。我正在使用Paramiko,会话似乎是命令,并打印目录,但我的change directory命令似乎不起作用,它打印我开始使用的目录 /01/家/ 我相信,由于我不小心尝试了一些东西,我终于找到了答案。您需要一次执行所有命令,而不需要在循环中执行这些命令。以我为例,它将是 import paramiko hostname = '' port = 22 username = '' password

我正在慢慢地尝试制作一个python脚本到SSH,然后FTP来做一些手动文件获取,我一直都在做。我正在使用Paramiko,会话似乎是命令,并打印目录,但我的change directory命令似乎不起作用,它打印我开始使用的目录

/01/家/


我相信,由于我不小心尝试了一些东西,我终于找到了答案。您需要一次执行所有命令,而不需要在循环中执行这些命令。以我为例,它将是

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()
当您多次运行exec_命令时,每个命令都在其自己的shell中执行。因此,前面的命令对以下命令的环境没有影响

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

command = "ORACLE_SID=PROD && cd /01/application/dataload && pwd"
stdin,stdout,stderr = ssh.exec_command(command)
在许多情况下,甚至不需要使用多个命令

例如,在以交互方式使用shell时,您可能会执行以下操作,而不是此顺序:

cd/路径 ls 你可以做:

ls/路径 另见:

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