O2-DQ User Interface 1.0.0
Loading...
Searching...
No Matches
runTableReader.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# PYTHON_ARGCOMPLETE_OK
3# -*- coding: utf-8 -*-
4
5# Copyright 2019-2020 CERN and copyright holders of ALICE O2.
6# See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
7# All rights not expressly granted are reserved.
8#
9# This software is distributed under the terms of the GNU General Public
10# License v3 (GPL Version 3), copied verbatim in the file "COPYING".
11#
12# In applying this license CERN does not waive the privileges and immunities
13# granted to it by virtue of its status as an Intergovernmental Organization
14# or submit itself to any jurisdiction.
15
16# \Author: ionut.cristian.arsene@cern.ch
17# \Interface: cevat.batuhan.tolon@cern.ch
18
19# Orginal Task: https://github.com/AliceO2Group/O2Physics/blob/master/PWGDQ/Tasks/tableReader.cxx
20
21import json
22import sys
23import logging
24import logging.config
25import os
26from extramodules.configGetter import configGetter
27from extramodules.debugSettings import debugSettings
28
29from extramodules.monitoring import dispArgs
30from extramodules.dqTranscations import aodFileChecker, forgettedArgsChecker, jsonTypeChecker, mainTaskChecker
31from extramodules.configSetter import multiConfigurableSet, processDummySet
32from extramodules.pycacheRemover import runPycacheRemover
33
34from dqtasks.tableReader import TableReader
35
36
39
40isAnalysisEventSelected = True
41isAnalysisTrackSelected = True
42isAnalysisMuonSelected = True
43isAnalysisSameEventPairingSelected = True
44isAnalysisDileptonHadronSelected = True
45
46booleanSelections = ["true", "false"]
47
48
51
52# init args manually
53initArgs = TableReader()
54initArgs.mergeArgs()
55initArgs.parseArgs()
56
57args = initArgs.parseArgs()
58configuredCommands = vars(args) # for get args
59
60# Debug settings
61debugSettings(args.debug, args.logFile, fileName = "tableReader.log")
62
63# Transcation management
64forgettedArgsChecker(configuredCommands)
65
66# Get Some cfg values provided from --param
67analysisCfg = configGetter(configuredCommands, "analysis")
68mixingCfg = configGetter(configuredCommands, "mixing")
69processCfg = configGetter(configuredCommands, "process")
70
71# Load the configuration file provided as the first parameter
72config = {}
73with open(args.cfgFileName) as configFile:
74 config = json.load(configFile)
75
76jsonTypeChecker(args.cfgFileName)
77
78taskNameInCommandLine = "o2-analysis-dq-table-reader"
79taskNameInConfig = "analysis-event-selection"
80
81mainTaskChecker(config, taskNameInConfig)
82
83
86
87logging.info("Only Select Configured as %s", args.onlySelect)
88if args.onlySelect == "true":
89 logging.info("INTERFACE MODE : JSON Overrider")
90if args.onlySelect == "false":
91 logging.info("INTERFACE MODE : JSON Additional")
92
93for key, value in config.items():
94 if isinstance(value, dict):
95 for value, value2 in value.items():
96
97 # aod
98 if value == "aod-file" and args.aod:
99 config[key][value] = args.aod
100 logging.debug(" - [%s] %s : %s", key, value, args.aod)
101 # reader
102 if value == "aod-reader-json" and args.reader:
103 config[key][value] = args.reader
104 logging.debug(" - [%s] %s : %s", key, value, args.reader)
105
106 # analysis-event-selection, analysis-track-selection, analysis-muon-selection, analysis-same-event-pairing
107 if value == "processSkimmed" and args.analysis:
108
109 if key == "analysis-event-selection":
110 if "eventSelection" in analysisCfg:
111 config[key][value] = "true"
112 logging.debug(" - [%s] %s : true", key, value)
113 isAnalysisEventSelected = True
114 if "eventSelection" not in analysisCfg:
115 logging.warning(
116 "YOU MUST ALWAYS CONFIGURE eventSelection value in --analysis parameter!! It is Missing and this issue will fixed by CLI"
117 )
118 config[key][value] = "true"
119 logging.debug(" - [%s] %s : true", key, value)
120
121 if key == "analysis-track-selection":
122 if "trackSelection" in analysisCfg:
123 config[key][value] = "true"
124 logging.debug(" - [%s] %s : true", key, value)
125 isAnalysisTrackSelected = True
126 if "trackSelection" not in analysisCfg and args.onlySelect == "true":
127 config[key][value] = "false"
128 logging.debug(" - [%s] %s : false", key, value)
129
130 if key == "analysis-muon-selection":
131 if "muonSelection" in analysisCfg:
132 config[key][value] = "true"
133 logging.debug(" - [%s] %s : true", key, value)
134 isAnalysisMuonSelected = True
135 if "muonSelection" not in analysisCfg and args.onlySelect == "true":
136 config[key][value] = "false"
137 logging.debug(" - [%s] %s : false", key, value)
138 if key == "analysis-dilepton-hadron":
139 if "dileptonHadron" in analysisCfg:
140 config[key][value] = "true"
141 isAnalysisDileptonHadronSelected = True
142 logging.debug(" - [%s] %s : true", key, value)
143 if "dileptonHadron" not in analysisCfg and args.onlySelect == "true":
144 config[key][value] = "false"
145 logging.debug(" - [%s] %s : false", key, value)
146
147 if "sameEventPairing" in analysisCfg:
148 isAnalysisSameEventPairingSelected = True
149 if "sameEventPairing" not in analysisCfg:
150 isAnalysisSameEventPairingSelected = False
151
152 # Analysis-event-mixing with automation
153 if args.mixing is None:
154 if value == "processBarrelSkimmed" and args.analysis:
155
156 if key == "analysis-event-mixing":
157 if "trackSelection" in analysisCfg and "eventMixing" in analysisCfg:
158 config[key][value] = "true"
159 logging.debug(" - [%s] %s : true", key, value)
160 if "eventMixing" not in analysisCfg and args.onlySelect == "true":
161 config[key][value] = "false"
162 logging.debug(" - [%s] %s : false", key, value)
163 if "eventMixing" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
164 logging.error(
165 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
166 )
167 sys.exit()
168
169 if value == "processMuonSkimmed" and args.analysis:
170
171 if key == "analysis-event-mixing":
172 if "muonSelection" in analysisCfg and "eventMixing" in analysisCfg:
173 config[key][value] = "true"
174 logging.debug(" - [%s] %s : true", key, value)
175 if "eventMixing" not in analysisCfg and args.onlySelect == "true":
176 config[key][value] = "false"
177 logging.debug(" - [%s] %s : false", key, value)
178 if "eventMixing" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
179 logging.error(
180 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
181 )
182 sys.exit()
183
184 if value == "processBarrelMuonSkimmed" and args.analysis:
185
186 if key == "analysis-event-mixing":
187 if ("trackSelection" in analysisCfg and "muonSelection" in analysisCfg and "eventMixing" in analysisCfg):
188 config[key][value] = "true"
189 logging.debug(" - [%s] %s : true", key, value)
190 if "eventMixing" not in analysisCfg and args.onlySelect == "true":
191 config[key][value] = "false"
192 logging.debug(" - [%s] %s : false", key, value)
193 if "eventMixing" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
194 logging.error(
195 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
196 )
197 sys.exit()
198
199 if value == "processBarrelVnSkimmed" and args.analysis:
200
201 if key == "analysis-event-mixing":
202 if "trackSelection" in analysisCfg and "eventMixingVn" in analysisCfg:
203 config[key][value] = "true"
204 logging.debug(" - [%s] %s : true", key, value)
205 if "eventMixingVn" not in analysisCfg and args.onlySelect == "true":
206 config[key][value] = "false"
207 logging.debug(" - [%s] %s : false", key, value)
208 if "eventMixingVn" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
209 logging.error(
210 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
211 )
212 sys.exit()
213
214 if value == "processMuonVnSkimmed" and args.analysis:
215
216 if key == "analysis-event-mixing":
217 if "muonSelection" in analysisCfg and "eventMixingVn" in analysisCfg:
218 config[key][value] = "true"
219 logging.debug(" - [%s] %s : true", key, value)
220 if "eventMixingVn" not in analysisCfg and args.onlySelect == "true":
221 config[key][value] = "false"
222 logging.debug(" - [%s] %s : false", key, value)
223 if "eventMixingVn" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
224 logging.error(
225 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
226 )
227 sys.exit()
228
229 # Analysis-event-mixing selection manually
230 if args.mixing is not None:
231 if value == "processBarrelSkimmed" and args.analysis:
232
233 if key == "analysis-event-mixing":
234 if ("trackSelection" in analysisCfg and "eventMixing" in analysisCfg and "Barrel" in mixingCfg):
235 config[key][value] = "true"
236 logging.debug(" - [%s] %s : true", key, value)
237 if ("trackSelection" in analysisCfg and "Barrel" not in mixingCfg and args.onlySelect == "true"):
238 config[key][value] = "false"
239 logging.debug(" - [%s] %s : false", key, value)
240 if "eventMixing" not in analysisCfg and "Barrel" in mixingCfg:
241 logging.error(
242 "When configuring analysis-event-mixing for Barrel, you must configure eventMixing within the --analysis parameter!"
243 )
244 sys.exit()
245 if "Barrel" in mixingCfg and "trackSelection" not in analysisCfg:
246 logging.error(
247 "When configuring analysis-event-mixing for Barrel, you must configure trackSelection within the --analysis parameter!"
248 )
249 sys.exit()
250 if "eventMixing" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
251 logging.error(
252 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
253 )
254 sys.exit()
255
256 if value == "processMuonSkimmed" and args.analysis:
257
258 if key == "analysis-event-mixing":
259 if ("muonSelection" in analysisCfg and "eventMixing" in analysisCfg and "Muon" in mixingCfg):
260 config[key][value] = "true"
261 logging.debug(" - [%s] %s : true", key, value)
262 if ("muonSelection" in analysisCfg and "Muon" not in mixingCfg and args.onlySelect == "true"):
263 config[key][value] = "false"
264 logging.debug(" - [%s] %s : false", key, value)
265 if "eventMixing" not in analysisCfg and "Muon" in mixingCfg:
266 logging.error(
267 "When configuring analysis-event-mixing for Muon, you must configure eventMixing within the --analysis parameter!"
268 )
269 sys.exit()
270 if "Muon" in mixingCfg and "muonSelection" not in analysisCfg:
271 logging.error(
272 "When configuring analysis-event-mixing for Muon, you must configure muonSelection within the --analysis parameter!"
273 )
274 sys.exit()
275 if "eventMixing" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
276 logging.error(
277 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
278 )
279 sys.exit()
280
281 if value == "processBarrelMuonSkimmed" and args.analysis:
282
283 if key == "analysis-event-mixing":
284 if (
285 "trackSelection" in analysisCfg and "muonSelection" in analysisCfg and "eventMixing" in analysisCfg and
286 "BarrelMuon" in mixingCfg
287 ):
288 config[key][value] = "true"
289 logging.debug(" - [%s] %s : true", key, value)
290 if (
291 "trackSelection" in analysisCfg and "muonSelection" in analysisCfg and "BarrelMuon" not in mixingCfg and
292 args.onlySelect == "true"
293 ):
294 config[key][value] = "false"
295 logging.debug(" - [%s] %s : false", key, value)
296 if "eventMixing" not in analysisCfg and "BarrelMuon" in mixingCfg:
297 logging.error(
298 "When configuring analysis-event-mixing for BarrelMuon, you must configure eventMixing within the --analysis parameter!"
299 )
300 sys.exit()
301 if "BarrelMuon" in mixingCfg and ("muonSelection" not in analysisCfg or "trackSelection" not in analysisCfg):
302 logging.error(
303 "When configuring analysis-event-mixing for BarrelMuon, you must configure both of muonSelection and trackSelection within the --analysis parameter!"
304 )
305 sys.exit()
306 if "eventMixing" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
307 logging.error(
308 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
309 )
310 sys.exit()
311
312 if value == "processBarrelVnSkimmed" and args.analysis:
313
314 if key == "analysis-event-mixing":
315 if ("trackSelection" in analysisCfg and "eventMixingVn" in analysisCfg and "BarrelVn" in mixingCfg):
316 config[key][value] = "true"
317 logging.debug(" - [%s] %s : true", key, value)
318 if ("trackSelection" in analysisCfg and "BarrelVn" not in mixingCfg and args.onlySelect == "true"):
319 config[key][value] = "false"
320 logging.debug(" - [%s] %s : false", key, value)
321 if "eventMixingVn" not in analysisCfg and "BarrelVn" in mixingCfg:
322 logging.error(
323 "When configuring analysis-event-mixing for BarrelVn, you must configure eventMixingVn within the --analysis parameter!"
324 )
325 sys.exit()
326 if "BarrelVn" in mixingCfg and "trackSelection" not in analysisCfg:
327 logging.error(
328 "When configuring analysis-event-mixing for BarrelVn, you must configure trackSelection within the --analysis parameter!"
329 )
330 sys.exit()
331 if "eventMixingVn" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
332 logging.error(
333 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
334 )
335 sys.exit()
336
337 if value == "processMuonVnSkimmed" and args.analysis:
338
339 if key == "analysis-event-mixing":
340 if ("muonSelection" in analysisCfg and "eventMixingVn" in analysisCfg and "MuonVn" in mixingCfg):
341 config[key][value] = "true"
342 logging.debug(" - [%s] %s : true", key, value)
343 if ("muonSelection" in analysisCfg and "MuonVn" not in mixingCfg and args.onlySelect == "true"):
344 config[key][value] = "false"
345 logging.debug(" - [%s] %s : false", key, value)
346 if "eventMixingVn" not in analysisCfg and "MuonVn" in mixingCfg:
347 logging.error(
348 "When configuring analysis-event-mixing for MuonVn, you must configure eventMixingVn within the --analysis parameter!"
349 )
350 sys.exit()
351 if "MuonVn" in mixingCfg and "muonSelection" not in analysisCfg:
352 logging.error(
353 "When configuring analysis-event-mixing for MuonVn, you must configure muonSelection within the --analysis parameter!"
354 )
355 sys.exit()
356 if "eventMixingVn" in analysisCfg and ("trackSelection" not in analysisCfg and "muonSelection" not in analysisCfg):
357 logging.error(
358 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
359 )
360 sys.exit()
361
362 # QA selections
363 if value == "cfgQA" and args.cfgQA:
364 config[key][value] = args.cfgQA
365 logging.debug(" - [%s] %s : %s", key, value, args.cfgQA)
366
367 # analysis-event-selection
368 if value == "cfgMixingVars" and args.cfgMixingVars:
369 multiConfigurableSet(config, key, value, args.cfgMixingVars, args.onlySelect)
370 logging.debug(" - [%s] %s : %s", key, value, args.cfgMixingVars)
371 if value == "cfgEventCuts" and args.cfgEventCuts:
372 multiConfigurableSet(config, key, value, args.cfgEventCuts, args.onlySelect)
373 logging.debug(" - [%s] %s : %s", key, value, args.cfgEventCuts)
374
375 # analysis-track-selection
376 if value == "cfgTrackCuts" and args.cfgTrackCuts:
377 multiConfigurableSet(config, key, value, args.cfgTrackCuts, args.onlySelect)
378 logging.debug(" - [%s] %s : %s", key, value, args.cfgTrackCuts)
379
380 # analysis-muon-selection
381 if value == "cfgMuonCuts" and args.cfgMuonCuts:
382 multiConfigurableSet(config, key, value, args.cfgMuonCuts, args.onlySelect)
383 logging.debug(" - [%s] %s : %s", key, value, args.cfgMuonCuts)
384
385 # analysis-dilepton-hadron
386 if value == "cfgLeptonCuts" and args.cfgLeptonCuts:
387 multiConfigurableSet(config, key, value, args.cfgLeptonCuts, args.onlySelect)
388 logging.debug(" - [%s] %s : %s", key, value, args.cfgLeptonCuts)
389
390 # analysis-same-event-pairing
391 if key == "analysis-same-event-pairing" and args.process:
392
393 if not isAnalysisSameEventPairingSelected:
394 logging.warning("You forget to add sameEventPairing option to analysis for Workflow. It Automatically added by CLI.")
395 isAnalysisSameEventPairingSelected = True
396 if "JpsiToEE" in processCfg and value == "processJpsiToEESkimmed":
397 if isAnalysisTrackSelected:
398 config[key]["processJpsiToEESkimmed"] = "true"
399 logging.debug(" - [%s] %s : true", key, value)
400 if not isAnalysisTrackSelected:
401 logging.error("trackSelection not found in analysis for processJpsiToEESkimmed -> analysis-same-event-pairing")
402 sys.exit()
403 if ("JpsiToEE" not in processCfg and value == "processJpsiToEESkimmed" and args.onlySelect == "true"):
404 config[key]["processJpsiToEESkimmed"] = "false"
405 logging.debug(" - [%s] %s : false", key, value)
406
407 if "JpsiToMuMu" in processCfg and value == "processJpsiToMuMuSkimmed":
408 if isAnalysisMuonSelected:
409 config[key]["processJpsiToMuMuSkimmed"] = "true"
410 logging.debug(" - [%s] %s : true", key, value)
411 if not isAnalysisMuonSelected:
412 logging.error("muonSelection not found in analysis for processJpsiToMuMuSkimmed -> analysis-same-event-pairing")
413 sys.exit()
414 if ("JpsiToMuMu" not in processCfg and value == "processJpsiToMuMuSkimmed" and args.onlySelect == "true"):
415 config[key]["processJpsiToMuMuSkimmed"] = "false"
416 logging.debug(" - [%s] %s : false", key, value)
417
418 if ("JpsiToMuMuVertexing" in processCfg and value == "processJpsiToMuMuVertexingSkimmed"):
419 if isAnalysisMuonSelected:
420 config[key]["processJpsiToMuMuVertexingSkimmed"] = "true"
421 logging.debug(" - [%s] %s : true", key, value)
422 if not isAnalysisMuonSelected:
423 logging.error(
424 "muonSelection not found in analysis for processJpsiToMuMuVertexingSkimmed -> analysis-same-event-pairing"
425 )
426 sys.exit()
427 if ("JpsiToMuMuVertexing" not in processCfg and value == "processJpsiToMuMuVertexingSkimmed" and args.onlySelect == "true"):
428 config[key]["processJpsiToMuMuVertexingSkimmed"] = "false"
429 logging.debug(" - [%s] %s : false", key, value)
430
431 if "VnJpsiToEE" in processCfg and value == "processVnJpsiToEESkimmed":
432 if isAnalysisTrackSelected:
433 config[key]["processVnJpsiToEESkimmed"] = "true"
434 logging.debug(" - [%s] %s : true", key, value)
435 if not isAnalysisTrackSelected:
436 logging.error("trackSelection not found in analysis for processVnJpsiToEESkimmed -> analysis-same-event-pairing")
437 sys.exit()
438 if ("VnJpsiToEE" not in processCfg and value == "processVnJpsiToEESkimmed" and args.onlySelect == "true"):
439 config[key]["processVnJpsiToEESkimmed"] = "false"
440 logging.debug(" - [%s] %s : false", key, value)
441
442 if "VnJpsiToMuMu" in processCfg and value == "processVnJpsiToMuMuSkimmed":
443 if isAnalysisMuonSelected:
444 config[key]["processVnJpsiToMuMuSkimmed"] = "true"
445 logging.debug(" - [%s] %s : true", key, value)
446 if not isAnalysisMuonSelected:
447 logging.error("muonSelection not found in analysis for processVnJpsiToMuMuSkimmed -> analysis-same-event-pairing")
448 sys.exit()
449 if ("VnJpsiToMuMu" not in processCfg and value == "processVnJpsiToMuMuSkimmed" and args.onlySelect == "true"):
450 config[key]["processVnJpsiToMuMuSkimmed"] = "false"
451 logging.debug(" - [%s] %s : false", key, value)
452
453 if "ElectronMuon" in processCfg and value == "processElectronMuonSkimmed":
454 if isAnalysisTrackSelected and isAnalysisMuonSelected:
455 config[key]["processElectronMuonSkimmed"] = "true"
456 logging.debug(" - [%s] %s : true", key, value)
457 else:
458 logging.error(
459 "trackSelection and muonSelection not found in analysis for processElectronMuonSkimmed -> analysis-same-event-pairing"
460 )
461 sys.exit()
462 if ("ElectronMuon" not in processCfg and value == "processElectronMuonSkimmed" and args.onlySelect == "true"):
463 config[key]["processElectronMuonSkimmed"] = "false"
464 logging.debug(" - [%s] %s : false", key, value)
465
466 if "All" in processCfg and value == "processAllSkimmed":
467 if (isAnalysisEventSelected and isAnalysisMuonSelected and isAnalysisTrackSelected):
468 config[key]["processAllSkimmed"] = "true"
469 logging.debug(" - [%s] %s : true", key, value)
470 else:
471 logging.debug(
472 "eventSelection, trackSelection and muonSelection not found in analysis for processAllSkimmed -> analysis-same-event-pairing"
473 )
474 sys.exit()
475 if ("All" not in processCfg and value == "processAllSkimmed" and args.onlySelect == "true"):
476 config[key]["processAllSkimmed"] = "false"
477 logging.debug(" - [%s] %s : false", key, value)
478
479 # If no process function is provided, all SEP process functions are pulled false (for JSON Overrider mode)
480 if (
481 key == "analysis-same-event-pairing" and args.process is None and not isAnalysisSameEventPairingSelected and
482 args.onlySelect == "true"
483 ):
484 config[key]["processJpsiToEESkimmed"] = "false"
485 config[key]["processJpsiToMuMuSkimmed"] = "false"
486 config[key]["processJpsiToMuMuVertexingSkimmed"] = "false"
487 config[key]["processVnJpsiToEESkimmed"] = "false"
488 config[key]["processVnJpsiToMuMuSkimmed"] = "false"
489 config[key]["processElectronMuonSkimmed"] = "false"
490 config[key]["processAllSkimmed"] = "false"
491
492processDummySet(config) # dummy automizer
493aodFileChecker(args.aod)
494
495if args.reader is not None:
496 if not os.path.isfile(args.reader):
497 logging.error("%s File not found in path!!!", args.reader)
498 sys.exit()
499elif not os.path.isfile((config["internal-dpl-aod-reader"]["aod-reader-json"])):
500 logging.error(" %s File not found in path!!!", config["internal-dpl-aod-reader"]["aod-reader-json"])
501 sys.exit()
502
503
506
507# Write the updated configuration file into a temporary file
508updatedConfigFileName = "tempConfigTableReader.json"
509
510with open(updatedConfigFileName, "w") as outputFile:
511 json.dump(config, outputFile, indent = 2)
512
513# commandToRun = taskNameInCommandLine + " --configuration json://" + updatedConfigFileName + " -b"
514commandToRun = (taskNameInCommandLine + " --configuration json://" + updatedConfigFileName + " --aod-writer-json " + args.writer + " -b")
515
516if args.writer == "false":
517 commandToRun = (taskNameInCommandLine + " --configuration json://" + updatedConfigFileName + " -b")
518
519print("====================================================================================================================")
520logging.info("Command to run:")
521logging.info(commandToRun)
522print("====================================================================================================================")
523
524# Listing Added Commands
525dispArgs(configuredCommands)
526
527os.system(commandToRun)
528
529runPycacheRemover()