关于功能:将变量传递给另一个Python脚本

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()。


writetoBOT取2个参数:selfinstruct。用Testgui实例调用它:

1
2
tgui=Testgui(your_master)
tgui.writetoBOT(l)

如果您想用Testgui类调用它,您仍然需要传递Testgui的一个实例:

1
2
tgui=Testgui(your_master)
Testgui.writetoBOT(tgui, l)


你宣布Testgui为一个类。这被理解为骨架或线框(注意,这是一个捷径,而不是现实)。您需要首先从这个骨架中创建一个"真实"的对象,以便使用它。

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)