2015-02-09 71 views
0

对于我的函数,我想访问一个数据库并从命令中搜索命令。Python函数打印两次,我需要删除符号

这是我的代码:

x="create vlan" 
y="global" 

def readswitch(x,y): 

    conn = sqlite3.connect('server.db') 
    with conn: 
     cur = conn.cursor() 
     run= cur.execute("SELECT command FROM switch WHERE function =? or type = ? ORDER BY key ASC",(x,y)) 
     read = cur.fetchall() 
     return read; 

import database 
print (database.readswitch(x,y)) 

现在,我可以印出我的答案,但也有对结果有几个错误,如下所示:

C:\Python34\python.exe C:/Users/Username/PycharmProjects/2015122/database.py 
[('enable',), ('configure terminal',), ('vlan (number)',), ('name (vlan name)',)] 
[('enable',), ('configure terminal',), ('vlan (number)',), ('name (vlan name)',)] 

Process finished with exit code 0 

有3个错误,我不需要它,但我不知道如何解决

  1. 我印出我的回答两次,但为什么它打印我不明白这一点TWI CE。

  2. 我希望我的回答应该在这个序列打印:

enable 
conf t 
vlan (number) 
name (vlan name) 

但连续打印。

  • 我想从删除符号:
  • [( '使能',),( '配置终端'),('VLAN(数)”,),( '名 (VLAN名称)',)]

    enable 
    conf t 
    vlan (number) 
    name (vlan name) 
    

    谁能给我我的函数一些建议吗? 我希望你能改善我的功能。谢谢。

    回答

    0

    首先让我们解释为什么你的结果打印两次。

    您有一个模块,database.py。它包含了线

    import database 
    print (database.readswitch(x,y)) 
    

    然后你可以

    $ python database.py 
    

    执行命令行的模块之前你与你的print到达线,导入database模块。这会导致模块的代码再次执行。这意味着print正在执行两次。

    为了解决这个问题,不要从模块中导入模块,只需使用

    print (readswitch(x,y)) 
    

    为了更加安全,你可以把这个内部条件。

    if __name__ == '__main__': 
        print (readswitch(x,y)) 
    

    现在我们可以解决输出的格式。

    fetchall方法结果a list。当您打印整个列表时,它会以连续字符串的形式打印列表的内容。

    >>> print([1, 2, 3, 'a', 'b', 'c']) 
    [1, 2, 3, 'a', 'b', 'c'] 
    

    如果你想格式化输出,你需要自己照顾。最直接的方法是使用循环。

    for command in readswitch(x, y): 
        print(command[0]) 
    

    您也可以使用str.join

    print('\n'.join(command[0] for command in readswitch(x, y))