2016-10-10 9 views
0

ここに合計noobがあります。私は、Pythonオブジェクトを作成し、その中のインスタンスでメソッドを実行しようとしています。実行したいコードブロックが実行されないようです。問題のコードブロックはrun_jobです。呼び出されると何もしないようです。私は間違って何をしていますか?Pythonメソッドが実行されていません

import datetime 
import uuid 
import paramiko 


class scan_job(object): 

    def __init__(self, protocol, target, user_name, password, command): 
     self.guid = uuid.uuid1() 
     self.start_time = datetime.datetime.now() 
     self.target = target 
     self.command = command 
     self.user_name = user_name 
     self.password = password 
     self.protocol = protocol 
     self.result = "" 

    def run_job(self): 
     if self.protocol == 'SSH': 
      ssh = paramiko.SSHClient() 
      ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
      try: 
       print "creating connection" 
       ssh.connect(self.target, self.user_name, self.password) 
       print "connected" 
       stdin, stdout, stderr = ssh.exec_command(self.command) 
       for line in stdout: 
        print '... ' + line.strip('\n') 
        self.result += line.strip('\n') 
       yield ssh 
      finally: 
       print "closing connection" 
       ssh.close() 
       print "closed" 

     else: 
      print "Unknown protocol" 

    def show_command(self): 
     print self.command 


test = scan_job('SSH', '192.168.14.10', 'myuser', 'mypassword', 'uname -n') 

test.show_command() 

test.run_job() 
+0

あなたは 'yield'ステートメントを使ってジェネレータメソッドを記述しました。これはあなたがやるべきことですか?ジェネレータは、遅延イテラブルを作成します。 –

+0

'yield ssh'を削除します。とにかくあなたがそれを持っている理由は分かりません。 –

答えて

0

このメソッドにはyieldステートメントが含まれています。このステートメントはジェネレータになります。ジェネレータは遅れて評価されます。検討:

>>> def gen(): 
... yield 10 
... yield 3 
... yield 42 
... 
>>> result = gen() 
>>> next(result) 
10 
>>> next(result) 
3 
>>> next(result) 
42 
>>> 

これは意図したとおりではない可能性があります。

+1

なぜdownvote? –

+0

は質問に答えることができないので私は推測ではありませんでした。私はあなたが発電機についてのポイントを作ったのを見ますが、それはOPの問題にどのように関係していますか? –

+0

@PaulRooneyあなたは本当に推論することはできませんか、私はもっと明示的にするべきであることを示唆していますか? –

0

収量は、返り値のように使用されるキーワードです。ただし、除算は ジェネレータを返します。
1)Understanding Generators in Python
2)What does the "yield" keyword do in Python?
3)Understanding the Yield Keyword in Python

すべてを行う必要があり、変更:

yield ssh 

へ:

ジェネレータについての詳細を読むには

return ssh 

したがって、run_jobは、その終了、例外、またはreturn文に達するまで、通常の関数のように実行されます。ただし、yield文を変更せずに実行したい場合は、

x = test.run_job() 
x.next() 
関連する問題