我有一种情况,我想在Azure发布阶段连续启动两个Python看门狗,然后继续执行以下任务。
据我了解,如果您要创建这样的“即发即弃”行为,则可以使用subprocess.Popen
当我在Azure外部运行subprocess.Popen(["python", "mywatchdog1.py"])
之类的东西时,它的行为符合我的期望,它“ fires&getting”],但是从任务运行相同的调用时(尝试同时使用“ Powershell”和“运行Python脚本“)在Azure Devops中,任务停止并等待监视程序完成。
这里是一个例子:
# 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"])
因此,无论您在本地运行还是在Azure Windows 2016代理上运行,我如何使subprocess.Popen
行为相同?任何帮助将不胜感激。
/尼古拉斯
所以,我如何使subprocess.Popen行为相同,无论是否您在本地运行还是在Azure Windows 2016代理上运行?
抱歉,目前还不支持这种情况。 Azure Devops管道一个接一个地执行任务,直到完成其中所有要完成的工作,它才会完成当前任务。
这就是它挂在Powershell
或Run a Python Script
任务中的原因,因为watchdog
始终在监听输入。您可以参考this document了解更多详情。按照设计,如果任务中有诸如watchdog
之类的东西在持续监视文件浏览器的更改,则该任务将无法完成。
希望我的回答有助于解决您的难题:)