2017-03-26 7 views
-1

私は自動化に取り組んでいます。ここでは、Linuxデバイス上で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

ような何か。例外を捕捉するには、関数内でtry-exceptを追加することができます – athi

+0

paramiko例外を追加することについてどんな考えを失敗したか、タイムアウト – micebrain

関連する問題