python - 파라미코에서 여러 명령을 실행하여 명령이 이전 명령의 영향을 받도록 합니다.




shell ssh (2)

우연히 무언가를 시도함으로써 나는 이것을 믿습니다. 모든 명령을 한 번에 수행해야하며 루프에서 수행 할 필요가 없습니다. 내 경우에는

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

나는 수동으로 파일을 수행하기 위해 SSH에 FTP로 파이썬 스크립트를 만들려고 노력하고 있습니다. Paramiko를 사용하고 있으며 세션이 명령을 내리고 디렉토리를 인쇄하지만 디렉토리 변경 명령이 작동하지 않는 것 같습니다. 시작하는 디렉토리를 인쇄합니다.

/ 01 / home /

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

exec_command 여러 번 실행하면 각 명령이 자체 "쉘"로 실행됩니다. 따라서 이전 명령은 다음 명령의 환경에 영향을 미치지 않습니다.

다음 명령에 영향을주기 위해 이전 명령이 필요한 경우 서버 쉘의 적절한 구문을 사용하십시오. 대부분의 * nix 쉘은 세미콜론 또는 이중 앰퍼샌드 (서명이 다른)를 사용하여 명령 목록을 지정합니다. 귀하의 경우 앰퍼샌드는 이전 명령이 성공한 경우에만 다음 명령을 실행하므로 더 적절합니다.

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






paramiko