こんにちは。 私はいくつかのクラスを含むスクリプトをいくつか持っています。私はそれらのクラスを使用して、それらを一緒に働かせるメインスクリプトを持っています、そして、私は別のスクリプトのmain.pyスクリプトで作成されたオブジェクトを使用したい。外部クラスで同じオブジェクトを使用するにはどうすればよいですか?
私のメインでないスクリプトに新しいオブジェクトを作成したくありません。 main.pyで作成された既存のオブジェクトを別のスクリプトで使用したい。
私はGPIOのシリアルポート経由でGSMモデムに接続するので、ATcommandsを使って "話す"ことができます。私はserialClassと私の最新の醜い子供のgsmSMS内のシリアルポート経由で通信できるいくつかの方法があるserial.pyスクリプト、いくつかのピン設定があるpowerOn.pyクラス(私はここに投稿するつもりはない)があります。私はsendSMS、listSMS、delSSpecificSMS、deleteAllSMSなどのsendSMS、receive()メソッドを必要とします。この原稿のオブジェクト。ここ
しかし
は問題です:マイmain.pyスクリプト(まあ...その一部):
def main():
try:
global running
running = True
global atCommandLineOn
atCommandLineOn = True
with ooGSM.RPiToGsmPins() as modemGSM:
with aGsmSerial.serialConnection() as serialGSM:
if modemGSM.czyWlaczany==True:
sms = aGsmSMS.sms(serialGSM) #THIS WHERE PROBLEM STARTS!!!!
else:
print("ERROR: Turn on the modem!!!")
if atCommandLineOn==True:
print("AT command line is ON.")
else:
print("AT command line is OFF.")
while running==True:
print("Write command:\n :: ", end="")
command = str(input())
menu(command, modemGSM, serialGSM)
time.sleep(0.5)
except OSError:
print("asdasdfsdff")
if __name__ == "__main__":
main()
魔法はメニュー(で起こる)が、それが正常に動作するので、私がいないことを決めましたコードをコピーにする。
これは私のserial.py
再びclass serialConnection():
IDLE = 0; SENDING = 1; RECEIVING = 2;
UNKNOWN = 0; COMPLETE_OK = 1; COMPLETE_ERROR = 2; NOTCOMPLETE = 3; EMPTY = 4;
def __init__(self, devicePath="/dev/ttyAMA0", timeout=3):
self.STATE = ["IDLE", "SENDING", "RECEIVING"]
self.STATE_RESPONSE = ["UNKNOWN" ,"COMPLETE_OK", "COMPLETE_ERROR", "NOTCOMPLETE", "EMPTY"]
self.mySerial = serial.Serial(devicePath)
self.mySerial.timeout = timeout
self.state = self.STATE[serialConnection.IDLE]
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
self.mySerial.flushInput()
self.mySerial.flushInput()
self.mySerial.close()
print("Serial connection closed")
def send(self, message, printWhatIsSent=True):
command = message + "\r"
if self.state==self.STATE[serialConnection.IDLE] and self.mySerial.isOpen(): #THIS IS WHERE PROGRAM STOPS
self.responseState=self.STATE_RESPONSE[serialConnection.UNKNOWN]
self.state = self.STATE[serialConnection.SENDING]
messageInBytes = self.str2byte(command)
self.mySerial.write(messageInBytes)
self.mySerial.flushOutput()
self.state = self.STATE[serialConnection.IDLE]
if printWhatIsSent==True:
print(">>>>> Command sent: " + message)
else:
print("!!!ERROR: Command did not send")
def str2byte(self, message):
return bytearray(message, "ascii")
def receive(self, saveResponseToFile=True, printResponseStatus=True, printResponse=True):
bytesToRead = self.mySerial.inWaiting()
responseReadyToSave = "saveResponseToFile=False"
if self.state==self.STATE[serialConnection.IDLE] and self.mySerial.isOpen():
self.state = self.STATE[serialConnection.RECEIVING]
while self.state==self.STATE[serialConnection.RECEIVING]:
modemResponse = ""
while self.mySerial.inWaiting() > 0:
responseInBytes = self.mySerial.read(bytesToRead)
modemResponse += self.byte2str(responseInBytes)
self.mySerial.flushInput()
self.state = self.STATE[serialConnection.IDLE]
if printResponse==True:
print("<<<<< received:")
print(modemResponse)
if self.lookForEndChars(modemResponse)==False:
self.isResponseEmpty(modemResponse)
if saveResponseToFile==True:
responseReadyToSave = self.makeResponseReadyToSave(modemResponse)
if printResponseStatus==True:
if self.responseState==self.STATE_RESPONSE[serialConnection.NOTCOMPLETE]:
print("INFO: End char is missing!!!")
print()
elif self.responseState==self.STATE_RESPONSE[serialConnection.EMPTY]:
print("INFO: Response is EMPTY!!!")
print()
elif self.responseState==self.STATE_RESPONSE[serialConnection.UNKNOWN]:
print("This one should never be printed!!!")
print()
print()
return responseReadyToSave
、全体ではなくコードです。
そして、私のsms.pyスクリプト: クラスのSMS():
def __init__(self, serialGSMclass):
self.setATE0() #AND OFC PROBLEM "GOES" HERE
self.setSmsMessageFormat()
self.setPrefferedSmsMessageStorage()
def setATE0(self):
command = "ATE0"
serialGSMclass.send(self, command) #AND HERE
serialGSMclass.receive(self, False, True, False) #QUESTION 2!
if serialGSMclass.responseState=="COMPLETE_OK":
print("Set to ATE0")
else:
print("ERROR: Did not set ATE0!!!")
エラー: 'SMS' オブジェクトが属性状態
を持っていないことは、プログラムがself.state」と "思う" ことを意味し"serialConnection.send()のpython isnt serialConnectionObject.stateではなく、smsObject.stateであり、誰もいないので見つけることができません。右?しかし、どうすればそれを動作させることができますか?
および 質問2: なぜ私は自分自身をsend()に入れなければならないのですか?またはmb私はすべきではない?さて、私はそれを書いているとき、私はそれが問題を引き起こすかもしれないと思う(私はちょっとsmsからserialConnectionに自己を渡すので)!しかし、前に私がこれを好きにしていたので: serialConnectionClass.send(コマンド)と私はこれを持っていた: エラー:send()が欠落していました1必要な位置引数: 'message' send()ただ一つの議論。しかし、send(self、command)は問題を引き起こし、send(command)は動作しません。 :D
これはあまりにも多くの定型文句のようです。あなたの質問のタイトルは簡単ですが、なぜその質問はとても複雑ですか?問題の性質を実際のコードから切り離し、[最小限の例](http://stackoverflow.com/help/mcve)を提供してください。 – timgeb
はsms.pyで、gmsSMS.pyは同じですか? – qvpham