由于令牌索引不递增,如何解决“ For循环”问题

时间:2019-06-18 05:58:42

标签: python-3.x for-loop pexpect

我正在处理x3.py文件,并从mon_back.py文件中调用check_vpn()和connect_vpn()函数。当我在x3.py中调用check_vpn函数时,它工作正常,但问题是当我调用connect_vpn()时,令牌索引[i]没有增加。

This is x3.py

import json
import mon_back

obj = mon_back.vpn()
obj.check_vpn()

with open('auth1.json') as json_file:  
    data = json.load(json_file)
    token = data["vpn_detail"]["tokens"]
    for i in range(len(token)):
        token1 = token[i]
        print(token[i])
        print(token1)
        i = i+1   
        obj.connect_vpn(token1)
mon_back.py
import ------
class vpn():
    vpn_bin= '/home/'

    def check_vpn(self):  
        myCmd = os.popen('ps aux | grep vpnc').read()
        for():
            if():
            return true

    def connect_vpn(self,token1):
        child = pexpect.spawn(self.vpn_bin + 'connectCiscoVpn_Banglore username', encoding='utf-8')
        child.expect('com')
        child.sendline(token1)
        h = child.expect(['authentication unsuccessful','no response from target','VPNC started in background', '[#\$] '])
        if h==0 or h==1:         
            with open('auth1.json') as json_file:  
            data = json.load(json_file)
            token = data["vpn_detail"]["tokens"]
            for i in range(len(token)):
                token1 = token[i]
                i = i+1  
                self.connect_vpn(token1)                              
        elif h==2:
            print("##################   VpN Connected..   ###########")                
            sys.exit()

每次运行此代码时,我都会得到相同的令牌,如果身份验证不成功,则它将增加i = i + 1的值,但是在重新进入for循环后,i的值将变为零。我希望i的值在每次进入for循环时都是递增的。

2 个答案:

答案 0 :(得分:0)

如果首先运行x3.py文件,并正确检查代码流,则会发现您在保留令牌。

首先,您将打开文件并将其传递给connect_vpn的{​​{1}}方法,以读取第一个标记。 然后在mon_back.py文件中检查条件mon_back.py的值是否再次打开同一文件并读取令牌,以便它再次获取第一个令牌。之后,您将调用相同的方法h 并再次检查self.connect_vpn的条件并重新打开文件,以便它再次读取第一个令牌。

请检查您的代码流并进行更正。

一种解决方案是,在这种情况下,您不需要写任何东西,只需从那里返回或打印消息或错误日志并返回,以便流程可以转到h,并使用第二个令牌返回到{ {1}}方法

答案 1 :(得分:0)

更改位于下面的for循环中,谢谢@pawan。我在两个文件中都更改了此for循环。

            if h==0 or h==1:               
                with open('auth1.json') as json_file:  
                    data = json.load(json_file)
                    token = data["vpn_detail"]["tokens"]
                    for i in range(0,len(token)): 
                        token1 = token[i]

在for循环中更改后,它将增加令牌索引。谢谢。