2015-02-09 66 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))