Вот более простой метод, который не включает потоки.
Держите счетчик и каждый второй вызов функции.
Обновление: Чтобы ответить на ваш вопрос в комментариях.
Это не застрянет в функции. некоторый цикл, который мешает нам достичь mainloop()
, потому что этот код добавляет только команду, которая должна быть запущена в списке событий с регулярным интервалом в 1 секунду. То, что на самом деле происходит, - это метод after()
, который добавит новое даже для запуска не раньше, чем через 1 секунду (1000 миллисекунд). Поскольку Tkinter управляется событиями, Tkinter будет обрабатывать каждый, даже в списке, как он приходит после каждого цикла mainloop()
.
import tkinter as tk
root = tk.Tk()
counter = 0
def change_text():
global counter
my_list = [".", "..", "...", ""]
if counter != 3:
l.config(text="Loading{}".format(my_list[counter]))
counter += 1
root.after(1000, change_text)
else:
l.config(text="Loading{}".format(my_list[counter]))
counter = 0
root.after(1000, change_text)
l = tk.Label(root, text = "")
l.pack()
change_text()
root.mainloop()
Я бы использовал регулярное выражение, которое использует утверждение нулевой длины
, чтобы сопоставить что-либо в строке после ключевого слова (даже буквальную звездочку)
сценарий изменяется на месте, используя то же имя файла при сохранении.
## Q:\Test\2019\01\18\SO_54259368.ps1
Push-Location "C:\Program Files\SplunkUniversalForwarder\etc\system\local"
$Clie = "inputs.conf"
$Serv = "server.conf"
(Get-Content $Clie) -replace "(?<=^host = ).*$",$Env:COMPUTERNAME | Set-Content $Clie
(Get-Content $Serv) -replace "(?<=^serverName = ).*$",$Env:COMPUTERNAME | Set-Content $Serv
Pop-Location
Оператор -replace
совпадает на основе регулярного выражения. Таким образом, ваше выражение соответствия:
"host = *"
завершит свое сопоставление после того, как совпадет с его первым «host =», не включая имя хоста, и это то, что будет заменено, оставив все без изменений впоследствии. Чтобы включить имя хоста в выражение соответствия, используйте это регулярное выражение:
"host = .*"