2014-01-19 74 views
1

即時通訊有點麻煩,我有一天寫了一個python腳本。該腳本適用於我的rasbperry pi,它具有連接到GPIO引腳的數字接口。這個腳本的目的是測試並看看它是否會解鎖5秒的機電鎖。雖然當我運行腳本沒有發生任何事情。沒有錯誤被記錄,並且對python腳本不熟悉,我不確定問題是什麼。任何建議或幫助將不勝感激。Raspberry Pi的Python腳本運行不正常

我知道數字接口和覆盆子pi交互沒有錯,因爲我可以用下面的命令手動運行python,並且所有的工作都像它應該的。鎖釋放,然後我可以關閉它。雖然當我運行我的腳本沒有發生任何事情。

python 
import piface.pfio 
piface.pfio.init() 
piface.pfio.digital_write(0, 1) 
led0 = piface.pfio.LED(0) 
led0.turn_off() 

我的Python腳本

#!/usr/bin/env python3 
"""Door Lock: System to control an electric lock""" 

import piface.pfio as piface 
from time import sleep 

class AuthToken: 
    def _init_(self, id, secret): 
     self.id=id 
     self.secret.secret 

class TestDoorController: 
    def send_open_pulse(self): 
     print "unlock the door" 

class BasicAuthenticator: 
    id = "Andrew" 
    secretPassword = "1234" 
    def check(self,token): 
     print "checking input of '" + token.id + "', + password + : " + token.secret + ", against secret password'" + self.secretPassword +"'" 
     result = (token.secret == self.secretPassword) & (token.id == self.id) 
     print "authentication is: " + str(result) 
     return result 

class TestInput: 
    def getInput(self): 
     print "checking for input" 
     authToken + AuthToken("Andrew","1234") 
     return authInput 

class DoorControllerPiFace: 
    def send_open_pulse(self): 
     piface.digital_write(0,1) 
     sleep(5) 
     piface.digital_write(0,0) 

def main(): 
    authInput = TestInput() 
    authenticator = BasicAuthenticator() 
    doorController = DoorControllerPiFace() 

    if(authenticator.check(authInput.getInput())): 
     doorController.send_open_pulse() 
    if _name_ == '_main_': 

     main() 

現在即時得到的構造函數沒有說法?

文件 「door_controllerTEST.py」,第47行,在 主()

文件 「door_controllerTEST.py」,線43,在主 如果(authenticator.check(authInput.getInput())):

文件 「door_controllerTEST.py」,30日線在getInput 回報的authToken( 「安德魯」, 「1234」)

類型錯誤:這個構造函數沒有參數

添加在extra_到我的AuthToken類,它給了我一個錯誤,我的pfio還沒有初始化。所以我加入了

import piface.pfio as pfio 
pfio.init() 

而且一切都在那之後工作。

回答

1

類TestInput

功能getInput(self):不返回任何東西(即,可變authInput爲空)。

您可能想要返回創建的令牌嗎? return AuthToken("Andrew","1234")即是。

類BasicAuthenticator

此類檢查對self.idself.secretPassword,但他們都沒有設置。您正在設置idsecretPassword

主要

你的主要功能也不會被調用,應if __name__ == '__main__':雙下劃線。

class AuthToken: 
    def __init__(self, id, secret): 
     self.id=id 
     self.secret=secret 

class TestDoorController: 
    def send_open_pulse(self): 
     print "unlock the door" 

class BasicAuthenticator: 
    def __init__(self): 
     self.id = "Andrew" 
     self.secretPassword = "1234" 

    def check(self,token): 
     print "checking input of '" + token.id + "', + password + : " + token.secret + ", against secret password'" + self.secretPassword +"'" 
     result = (token.secret == self.secretPassword) & (token.id == self.id) 
     print "authentication is: " + str(result) 
     return result 

class TestInput: 
    def getInput(self): 
     print "checking for input" 
     return AuthToken("Andrew","1234") 

class DoorControllerPiFace: 
    def send_open_pulse(self): 
     piface.digital_write(0,1) 
     sleep(5) 
     piface.digital_write(0,0) 

def main(): 
    authInput = TestInput() 
    authenticator = BasicAuthenticator() 
    doorController = DoorControllerPiFace() 

    if(authenticator.check(authInput.getInput())): 
     doorController.send_open_pulse() 

if __name__ == '__main__': 
    main() 
+0

你的權利我不小心把它放在那裏,但即使在添加新行後,沒有任何事情發生。它仍然在運行,並沒有給我任何輸出。 – Celerium

+0

嘗試在'if _name_ == _main_:'中更改爲雙下劃線,您將得到一些輸出:) – Qiau

+0

在雙註釋中添加,現在我至少會收到一些消息。我把它們放在上面的描述中。並且我不定義self.id是id還是我想念 – Celerium