Запуск Python сторожевого таймера в Azure Devops Release конвейере - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть ситуация, когда я хотел бы запустить два сторожевых таймера Python последовательно на этапе Azure Release, а затем продолжить выполнение следующих задач.

Как я понимаю, subprocess.Popen - это путь к go, если вы хотите создать такое поведение "огонь и забыть", например, когда я запускаю что-то вроде subprocess.Popen(["python", "mywatchdog1.py"]) за пределами Azure, оно ведет себя как я и ожидал, он «запускает и забывает» , но при выполнении того же вызова из задачи (пробовал с «Powershell» и «Run Python Script») в Azure Devops, задача останавливается и ждет завершения процесса наблюдения до sh.

Вот пример:

# mywatchdog1.py

import time
import os
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

class MyWatchdogEventHandler(LoggingEventHandler):

    def dispatch(self, event):
        print(f"A new dog was created")


if __name__ == "__main__":
    dog_file_path = "c:\\dogs"
    event_handler = MyWatchdogEventHandler()
    observer = Observer()
    observer.schedule(event_handler, dog_file_path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Это то, что я пытаюсь запустить, используя что-то вроде:

import subprocess as sp

if __name__ == "__main__":
    sp.Popen(["python", "C:\\scripts\\mywatchdog01.py"])

Итак, как мне заставить subprocess.Popen вести себя одинаково, независимо от того, работаете ли вы локально или на агенте Azure Windows 2016? Любая помощь будет принята с благодарностью.

/ Никлас

1 Ответ

0 голосов
/ 17 февраля 2020

Итак, как мне заставить subprocess.Popen вести себя одинаково, независимо от того, работаете ли вы локально или на агенте Azure Windows 2016?

Извините, но я боюсь, что это не поддерживается сценарий на данный момент. Azure конвейер Devops выполняет задачи одну за другой, он не завершит текущую задачу sh, пока не завершит всю работу, которая должна быть выполнена в нем.

Вот почему он зависает в вашем Powershell или Run a Python Script задача, потому что watchdog всегда слушает входы. Вы можете обратиться к этому документу для более подробной информации. И по замыслу задача не будет завершена sh, если в задаче есть что-то вроде watchdog, отслеживающее изменения файлового проводника.

Надеюсь, мой ответ поможет решить вашу загадку:)

...