在python

时间:2018-03-21 00:39:47

标签: python

我正在尝试在python上播放音频并更新变量“Flag”(如果音频播放更新为1或音频已停止更新为0),那么我可以继续在另一个脚本上共享变量值然后将其发送到csv文件。但是我是python的新手,我共享变量的唯一方法是使用Global,在这种情况下,我想从函数中的函数共享一个变量。我怎样才能做到这一点?

到目前为止,这是我的代码:

# -*- coding: utf-8 -*-
import sched,time,random,pickle
from pygame import mixer
def soundlib():
    s = sched.scheduler(time.time, time.sleep) 
    mixer.init(48000, -16, 1, 1024) #Frequency,size, 1:mono,channels,buffer

    def main():
        name="C:/whitenoise4.wav" 
        global sound
        sound=mixer.Sound(name)
        x=sound.get_length() #segundos que dura audio
        s.enter(5, 1, play, ()) #esperamos 5s para reproducir
        s.enter(5+x, 1, stop, ()) #10s de reproducción
        s.enter(18,1,main,()) #Tiempo de silencio: 20s-(5+x)
    def play():
        sound.play()
        global Flag
        Flag=1
        return Flag
    def stop():
        Flag=0
        return Flag

    main()
    s.run()

脚本2

import multiprocessing
from soundlibrary4 import *

soundlib()

到目前为止它只播放音频,但它不会改变Flag状态,也不会打印当前状态。

1 个答案:

答案 0 :(得分:0)

您可以在其他文件中使用global。 一个是使用类变量。和其他正在使用全局变量。

classA.py

g_Var=0


class Player:
    flag=0
    def __init__(self):
        pass

    def play(self):
        global g_Var
        print('play')
        Player.flag=1
        g_Var=1

    def stop(self):
        global g_Var
        print('stop')
        Player.flag=0
        g_Var=0

    def status(self):
        print('player flag=', Player.flag, ' g_Var=', g_Var)


if __name__=="__main__":
    print('main in classA')
    A = Player()
    A.status()
    A.play()
    A.status()
    A.stop()
    A.status()

classATest.py

import classA

def main():
    print('g_Var access in classATest = ', classA.g_Var)

A = classA.Player()
A.status()
A.play()
A.status()
A.stop()
A.status()

B = classA.Player()
B.status()
A.play()
A.status()
B.status()

A.stop()
A.status()
B.status()

B.play()
A.status()
B.status()
main()

B.stop()
A.status()
B.status()
main()

,输出

player flag= 0  g_Var= 0
play
player flag= 1  g_Var= 1
stop
player flag= 0  g_Var= 0
player flag= 0  g_Var= 0
play
player flag= 1  g_Var= 1
player flag= 1  g_Var= 1
stop
player flag= 0  g_Var= 0
player flag= 0  g_Var= 0
play
player flag= 1  g_Var= 1
player flag= 1  g_Var= 1
g_Var access in classATest =  1
stop
player flag= 0  g_Var= 0
player flag= 0  g_Var= 0
g_Var access in classATest =  0

您可以更改全局变种

def turnon():
    print('turn on')
    classA.g_Var=1
    classA.Player.flag=1

def turnoff():
    print('turn off')
    classA.g_Var=0
    classA.Player.flag=0