我正在尝试在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状态,也不会打印当前状态。
答案 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