我正在尝试将ESA'2 sen2cor python-script集成到我的工作流程中。为此,我创建了一个子流程,通过该子流程我可以调用“ L2A_Process.bat”文件。 我想使用一个超时启动sen2cor-script,因为它会卡住并会不时冻结,以便在失败时自动重新启动。 要启动它并捕获超时,我成功使用了以下脚本:
据我所知。结果是sen2cor-script被暂停,给出以下输出:
app = Flask(__name__)
app.config['CORS_HEADERS'] = 'Content-Type'
@app.route("/")
def main():
return "Welcome1"
if __name__ == "__main__":
#app.run() ##Replaced with below code to run it using waitress
serve(app, host='0.0.0.0', port=8000,threads= 8)
我想知道如何使用其自己的所有子子流程(即“ L2A_Process.py”)正确终止子流程“ p”。
一些观察:
此脚本需要在Windows上运行;
我尝试在没有上面示例中使用过的creationflag的情况下终止子进程:这导致该子进程被终止,但是“ L2A_Process.py”脚本解析并保持运行(这是核心我的问题);
答案 0 :(得分:0)
此代码对我有用,可以在将S1的2数据从L1C转换为L2A时监视Sen2cor状态。 Sen2cor进程既耗时又占用CPU,因此请耐心等待。用DEM,DDV等创建L2A花费了半个小时。希望对您有所帮助
from subprocess import Popen, PIPE
import os
pathtoprodS1C = "path_to_L1C_product" // safe file
outdirS2A = "output_dir" // where L2A files will be placed
pathtoL2Process = "path_to_L2A_Process" //if not in path
pathtoGIPP = "path_to_your_GIPP/L2A_GIPP.xml"
procName = "./L2A_Process"
os.chdir(pathtoL2Process)
import shlex
pcall = "./{} {} --output_dir {} --tif --GIP_L2A {}".format(procName,
pathtoprodS1C,
pathtoprodS2A,
pathtoGIPP)
args = shlex.split(pcall)
print(args)
try:
p = Popen(args, stdout=PIPE)
eut = p.stdout.readline()
while eut:
eut = p.stdout.readline()
print(eut)
finally:
print('Sen2Cor is Done')
exit()