2017-03-26 1 views
-1

자동화 작업 중입니다. 여기에 리눅스 장치에 n 개의 명령을 동시에 또는 순차적으로 실행하는 데 어려움이 있습니다. 이제 아래의 방법을 사용하고 있지만 각 명령에 대한 정적 구성을 만드는 대신 명령 목록을 사용할 수있는 방법이 있습니다. 다른 시나리오에서 명령 수가 변경 될 수 있습니다.paramiko mutiple 명령을 인수로 사용합니다.

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(host, username=user,password=passwd) 
stdin, stdout, stderr = ssh.exec_command(cmd1) 
output1 = stdout.read() 
data1 = str(output1) 
displaymessage1 = data1 
stdin, stdout, stderr = ssh.exec_command(cmd2) 
output1 = stdout.read() 
data1 = str(output1) 
#print data1 
displaymessage2 = data1 
stdin, stdout, stderr = ssh.exec_command(cmd3) 
output1 = stdout.read() 
data1 = str(output1) 
#print data1 
displaymessage3 = data1 
stdin, stdout, stderr = ssh.exec_command(cmd4) 
output1 = stdout.read() 
data1 = str(output1) 
#print data1 
displaymessage4 = data1 
stdin, stdout, stderr = ssh.exec_command(cmd5) 
output1 = stdout.read() 
data1 = str(output1) 

답변

1

명령을 실행하고 명령을 목록에 유지하는 기능을 코드를 리팩터링하는 것을 고려하십시오. 우리는 연결에 대한 예외를 처리 할 수있는 방법이 경우

def run_command(cmd): 
    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(host, username=user,password=passwd) 
    stdin, stdout, stderr = ssh.exec_command(cmd) 
    output = stdout.read() 
    return str(output) 

commands_list = [cmd1, cmd2, cmd3, cmd4] 

# run each command in the list and keep the output in data 
data = [run_command(cmd) for cmd in commands_list] 
+0

같은 뭔가가 실패 또는 시간 초과 – athi

+0

을 당신이 예외의 경우에 수행 할 작업에 따라 달라집니다 paramiko 예외 – athi

+0

을 추가하는 방법에 대한 어떤 생각. 예외를 잡으려면 함수에서 try-except를 추가 할 수 있습니다 – micebrain

관련 문제