python - Выполните несколько команд в Paramiko, чтобы на команды влияли их предшественники




shell ssh (2)

Когда вы запускаете exec_command несколько раз, каждая команда выполняется в своей «оболочке». Таким образом, предыдущие команды не влияют на окружение следующих команд.

Если вам нужно, чтобы предыдущие команды влияли на следующие команды, просто используйте соответствующий синтаксис вашей серверной оболочки. Большинство оболочек * nix используют точку с запятой или двойной амперсанд (с различной семантикой) для указания списка команд. В вашем случае амперсанд является более подходящим, поскольку он выполняет следующие команды, только если предыдущие команды выполняются успешно:

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

Я медленно пытаюсь сделать сценарий 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()

Ну, случайно попробовав что-то, мне удалось выяснить это, я верю. Вы должны выполнять все команды одновременно и не делать их в цикле. для моего примера это было бы

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()






paramiko