Passing variable to another Python Script
本问题已经有最佳答案,请猛点这里访问。
在另一个python脚本中,我很难将变量从一个函数传递到另一个函数。我读过其他答案,但它们在这个问题上没有真正的帮助。
这是我要将变量发送到的第一个文件(为了清晰起见,省略了一些代码)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # TestGUI.py from Tkinter import * import serial import os class Testgui: def __init__(self, master): def writetoBOT(self,instruct): ser = serial.Serial(6) ser.baudrate = 9600 ser.parity = serial.PARITY_NONE #set parity check: no parity ser.timeout = 1 #non-block read ser.writeTimeout = 2 #timeout for writ if(ser.isOpen() == False): ser.open() print ser.portstr # check which port was really used ser.write(instruct) else : ser.write(instruct) |
这是sceond文件:
1 2 3 4 5 6 7 8 9 10 11 | # TestGUI_2.py from TestGUI import Testgui class Tracker: def __init__(self): pass def drive(self,cords, cords1): while( cords >= 320): l='l' Testgui.writetoBOT(l) # This is the problem line |
类型错误:必须使用testgui实例作为第一个参数(改为获取str实例)调用未绑定的方法writetobot()。
1 2 | tgui=Testgui(your_master) tgui.writetoBOT(l) |
如果您想用
1 2 | tgui=Testgui(your_master) Testgui.writetoBOT(tgui, l) |
你宣布
1 | testgui=Testgui(amaster) |
在类中,有可能在类级别上应用方法(绑定函数)。这些方法称为静态方法或类方法。它们必须用Python装饰。
有关详细信息,请参阅http://en.wikipedia.org/wiki/object_-oriented_programming。
或者,您可以为这两个脚本留出公共空间,它由数据库acn-sqllite提供。
例如,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | # file1.py import sqlite3 con = sqlite3.connect('messages.db') cur = con.cursor() #cur.execute('CREATE TABLE message (id INTEGER PRIMARY KEY, name TEXT, content TEXT, read INTEGER)') #con.commit() for x in range(100000): if x in range(1, 500): cur.execute('INSERT INTO message (id, name, content, read) VALUES(NULL,"Guido","van Rossum", 0)') con.commit() # file2.py import sqlite3 import time con = sqlite3.connect('messages.db') cur = con.cursor() def listen(): messages = cur.execute('SELECT * FROM message WHERE read=0') if not messages: return False for m in messages: print 'get message ', m cur.execute("UPDATE message SET read=1 WHERE id=?", m[0]) con.commit() print 'update db' return True while True: listen() time.sleep(5) |