2017-04-05 124 views
0

有一个类应该创建一个描述连接到远程Linux服务器使用paramiko的对象。Python类奇怪的行为

class Oracle: 
    def __init__(self): 
    ... 
    self.outfile = outfile 

在这堂课我有2个功能。文件的一个回报列表:

def oratab(self): 
    self.remote.send("cat /etc/oratab\n") 
    ... 
    return oralst 
> [u'one', u'oneone', u'oneoneone'] 

另外一个利用的oratab FUNC文件列表返回从远程服务器的信息:

def get_arcs(self, n): 
     yield basestatus, sum(lst) 
self.remote.send("exit\n") 
time.sleep(1) 

如果我通过价值get_arcs手动它的工作原理确定。
如果我手动通过oratab调用,它工作正常。
如果我合计这两个功能结合在一起:

for i, y in zip(instance.get_arcs(), instance.oratab()): 
    print i, y 

它返回相同的结果两次,即使它应该削减到最小的一个(这两个列表是3元大) 所以,如果我呼吁所有那些没有另一个函数的调用看起来不错,但是如果它们在同一个脚本中执行,结果都是意外的(即使没有zip())

回答

1

get_arcs()是一个生成器,oratab()不是。尝试使用

zip(list(instance.get_arcs()), instance.oratab()) 
+0

我想:__for一个在(0,1,2):对于I,Y拉链(名单(instance.get_arcs(一)) ,instance.oratab()):print i,y__但它返回了第一个func可迭代的罚款,但第二个没有被迭代:http://prntscr.com/et3dmg __orcl__是oratab的第一个元素,每当其他2个没有被称为 – feedthemachine

+0

我宁愿不迭代我的oratab函数,因为它需要大量的代码重构 – feedthemachine

1

最后我明白了:

for i, b in zip((0, 1, 2), instance.oratab()): 
    print list(instance.get_arcs(i)), b 
+0

我必须承认我有点困惑......我的回答实际上并不完全正确,那么......我是对吗?是否有可能不接受答案? – knitti

+0

list(instance.get_arcs())得到了诀窍:) – feedthemachine