#python #windows #multithreading
#python #Windows #многопоточность
Вопрос:
Проблема
У меня есть программа, которую я написал, которая использует два потока. Один поток изменяет цвет текста и фона командной строки. Другой поток отображает меню справки или перебирает список из 1000 чисел. Проблема в том, что я хочу, чтобы программа возвращалась к приглашению и ждала новых инструкций вместо циклического перехода по цветовому спектру. Я бы хотел, чтобы программа перебирала цветовой спектр, а также ждала, пока конечный пользователь введет что-то еще в командной строке. Разве это невозможно? К сожалению, эта программа будет работать только в операционной системе Windows (OS).
Кроме того, я даже не могу вывести-C из программы, если захочу, потому что поток, который я создаю, по-видимому, не будет прослушивать ввод. Странно.
Код
import os
import getopt
import time
import sys
import threading
def whiteRabbit():
"""Change the color of the command prompt while the program is executing."""
for i in range(60):
os.system('color %d' % i)
time.sleep(1)
def goGoGo():
for i in range(1000):
print("Hey we have another number, %d " % i)
def howTo():
print("Here are the options for this program")
print ("%s -h (help menu. What you are reading now.)" % sys.argv[0])
print("%s -g (goGoGo() mode. This prints a list of numbers to the console. Wow. :0" % sys.argv[0])
print("%s --whiteRabbit (This changes the color of the console. Windows only. Sorry cool Unix people." % sys.argv[0])
if __name__ == "__main__":
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], 'hg', ['whiteRabbit'])
for opt, arg in opts:
if opt in ('-h'):
howTo()
elif opt in ('-g'):
goGoGo()
elif opt in ('--whiteRabbit'):
wr = threading.Thread(target=whiteRabbit)
wr.start()
except getopt.GetoptError as crap:
howTo()
Комментарии:
1. Какие параметры вы используете для запуска программы?
2. -h —WhiteRabbit или -g —WhiteRabbit . Любой из этих вариантов.
3.Я думаю, вам нужно сделать поток демоном: т. е.:
wr.daemon - True
перед вызовомwr.start()
.4. Если я это сделаю,
wr.daemon = True
, то консоль вообще не меняет цвета. Странно. Это небольшое изменение кода заставляет программу вести себя как обычно без каких-либо изменений цвета.