我有一个工作功能会在用户写出口时停止,但是我还有另一个功能不会停止,因此cmd会一直保持打开状态,不会像其他功能会不断更改cmd那样关闭文字颜色
import os,webbrowser,time,random,sys
from threading import Thread
def fun1():
Q=1
while Q==1:
print ('would you like to:')
print('1.launch an applcation')
print('2.browse the internet')
print('========================================')
bruv=input('your answer: ')
if bruv in ('1','launch','launch app','launch an application'):
print('========================================')
print('what app would you like to open?')
print('========================================')
x=input('your answer: ')
if x not in ('word'):
y=x+'.exe'
os.startfile(y)
else:
z='win'+x
os.startfile(z)
if bruv in ('2','browse the internet','browse','browse internet'):
print('========================================')
print ('where would you like to go?')
print('========================================')
p=input('your answer: ')
p='www.'+p+'.com'
webbrowser.open(p)
print('========================================')
print ('ok')
print('========================================')
print ('wanna continue?')
if input() in ('exit','no','quit','nope','close'):
print('========================================')
print ('ok! thanks for using my bot!')
print('========================================')
time.sleep(1)
Q+=1
countdown=3
while countdown>=0:
if countdown!=0:
print (countdown)
time.sleep(1)
countdown-=1
else:
sys.exit()
def fun2():
what=1
while what==1:
os.system('color E')
time.sleep(0.2)
os.system('color A')
time.sleep(0.2)
os.system('color C')
time.sleep(0.2)
os.system('color B')
time.sleep(0.2)
os.system('color D')
time.sleep(0.2)
else:
sys.exit()
t1=Thread(target=fun1)
t2=Thread(target=fun2)
t1.start()
t2.start()
在此代码中fun2不断滚动更改颜色并不会关闭CMD 我也知道这段代码非常糟糕,我只是在启动python。
答案 0 :(得分:0)
所以这里的问题是,整个脚本(同时启动两个函数/线程)在默认情况下仅在其启动的所有线程都停止时才结束。因此,您的所有函数都需要在某个时候返回,但是您的fun2()
将永远不会结束,因为无限循环while what==1
将始终以what
等于1
的方式运行。 (请注意,Python中无穷循环的约定是使用while True: ...
)。
要告诉一个线程所有其他线程都应该完成时,必须将其设置为Daemon
。您可能需要查看here,其中文档显示:
可以将一个线程标记为“守护程序线程”。的意义 标志是只有守护程序线程时,整个Python程序都会退出 离开了。初始值是从创建线程继承的。的 可以通过daemon属性或daemon构造函数设置标志 论点。
因此,在上面的示例中,使t2
成为守护进程应该可以工作。
...
t1 = Thread(target=fun1)
t2 = Thread(target=fun2)
t2.deamon = True
t1.start()
t2.start()
P.S .:另外请注意,color
并非在所有终端和操作系统(例如MacOS)上都适用