teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

文章の体裁

2017/12/16 15:07

投稿

minhouse10
minhouse10

スコア41

title CHANGED
File without changes
body CHANGED
@@ -7,11 +7,11 @@
7
7
 
8
8
  ご教授の程よろしくお願いいたします。
9
9
 
10
- 修正後のコード:
10
+
11
11
  YouheiSakurai様のご回答によりTimeoutError発生後も停止せずに以下任意のエラー出力と共に処理継続する事が確認できました!
12
-
13
12
  ## SSH connection failed for xx.xx.xx.xxx ##
14
13
 
14
+ 修正後のコード:
15
15
  ------------------------
16
16
  ```ここに言語を入力
17
17
  #Modules

1

修正版コードの追加、処理結果記入

2017/12/16 15:07

投稿

minhouse10
minhouse10

スコア41

title CHANGED
File without changes
body CHANGED
@@ -7,13 +7,23 @@
7
7
 
8
8
  ご教授の程よろしくお願いいたします。
9
9
 
10
+ 修正後のコード:
11
+ YouheiSakurai様のご回答によりTimeoutError発生後も停止せずに以下任意のエラー出力と共に処理継続する事が確認できました!
12
+
13
+ ## SSH connection failed for xx.xx.xx.xxx ##
14
+
10
15
  ------------------------
16
+ ```ここに言語を入力
17
+ #Modules
11
18
  import paramiko
19
+ from contextlib import suppress
20
+ from paramiko import SSHException
12
21
 
13
22
  #Variables
14
23
  USER = 'UserID'
15
24
  PSWD = 'password'
16
25
 
26
+
17
27
  #Classes and Functions
18
28
  class InputReader:
19
29
  def __init__(self, commands_path, hosts_path):
@@ -26,6 +36,7 @@
26
36
 
27
37
  def __readlines(self, path):
28
38
  with open(path) as f:
39
+ # return map(lambda v: v.strip(), f.readlines())
29
40
  return [v.strip() for v in f.readlines()] #List comprehension
30
41
 
31
42
  class CommandExecuter:
@@ -34,6 +45,64 @@
34
45
  self.command = command
35
46
 
36
47
  def execute(self):
48
+ with suppress(TimeoutError):
49
+ ssh = paramiko.SSHClient()
50
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
51
+ ssh.connect(self.host, username=USER, password=PSWD)
52
+
53
+ stdin, stdout, stderr = ssh.exec_command(self.command)
54
+
55
+ errors = stderr.readlines()
56
+
57
+ lines = [v.strip() for v in stdout.readlines()]
58
+ return lines
59
+ print('## SSH connection failed for %s ##' % h + '\n')
60
+
61
+ #Main Procedure
62
+ if __name__ == '__main__':
63
+ reader = InputReader("commands2.txt", "systems2.txt")
64
+ reader.read()
65
+
66
+ for h in reader.hosts:
67
+ for c in reader.commands:
68
+ executer = CommandExecuter(h, c)
69
+ results = executer.execute()
70
+ print("IP:{0}({1}):".format(h, c) + '\n')
71
+ if results != None:
72
+ for i in results:
73
+ print(i + '\n')
74
+
75
+ ```
76
+
77
+ 修正前のコード:
78
+ ------------------------
79
+ ```ここに言語を入力
80
+ import paramiko
81
+
82
+ #Variables
83
+ USER = 'UserID'
84
+ PSWD = 'password'
85
+
86
+ #Classes and Functions
87
+ class InputReader:
88
+ def __init__(self, commands_path, hosts_path):
89
+ self.commands_path = commands_path
90
+ self.hosts_path = hosts_path
91
+
92
+ def read(self):
93
+ self.commands = self.__readlines(self.commands_path)
94
+ self.hosts = self.__readlines(self.hosts_path)
95
+
96
+ def __readlines(self, path):
97
+ with open(path) as f:
98
+ return [v.strip() for v in f.readlines()] #List comprehension
99
+
100
+ class CommandExecuter:
101
+ def __init__(self, host, command):
102
+ self.host = host
103
+ self.command = command
104
+
105
+ def execute(self):
37
106
  ssh = paramiko.SSHClient()
38
107
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
39
108
  ssh.connect(self.host, username=USER, password=PSWD)
@@ -61,4 +130,5 @@
61
130
  if results != None:
62
131
  for i in results:
63
132
  print(i)
64
- print('\n')
133
+ print('\n')
134
+ ```