Tools, tips, tricks: Run tool run

11 februari 2016

Daar ga je weer, denk je misschien… Elke dag weer data importeren op dezelfde manier, dat moet toch makkelijker kunnen?! Het maken van ModelBuilder-modellen helpt hier natuurlijk bij, maar we willen meer. We willen het compleet automatisch! Waarschijnlijk heeft iedere gebruiker of beheerder wel één taak die net zo goed door een machine uitgevoerd kan worden.

door Judith Kats, engineer

Wat heb je nodig?

Allereerst heb je een model nodig waarin de taak is verwerkt, bijvoorbeeld het inlezen van een csv in een feature class.

Om dit model te automatiseren zijn er nog een paar andere zaken nodig:

  • Een Python-script van het model of een Python-script om het model aan te roepen.
  • Administrator-rechten om een taak in de Task Scheduler (Taakplanner) van Windows in te regelen.

Een model kun je niet direct als taak aan de Task Scheduler van Windows toevoegen, daarvoor heb je een Python-script nodig. Deze is zelf te maken, door het model te exporteren naar een Python-script of je maakt een script die het model aanroept. Ook kun je gebruik maken van het bijgevoegde generieke script om eenvoudig modellen en tools aan te roepen.

Model exporteren naar Python

Als je het model exporteert naar een Python-script wordt er een script aangemaakt waarin alle tools uit het model worden aangeroepen. Je kunt kiezen of je de argumenten (in het script wilt opnemen of bij de taak wilt vermelden. Dit script kun je vervolgens gebruiken om als taak toe te voegen aan de Task Scheduler.  

Met de Task Scheduler kun je taken op bepaalde tijdstippen automatisch laten uitvoeren, op je eigen computer of op de server. Zoek onder Windows naar Schedule Task om de Task Scheduler te openen. Het toevoegen van een script aan de Task Scheduler gaat eenvoudig. Klik op Create Task om een nieuwe taak aan te maken en vul de schermen naar wens in. 

Let er wel op dat je naar het juiste Python-programma verwijst (ArcGIS for Desktop of ArcGIS for Server) en dat de argumenten met een spatie gescheiden zijn. Het eerste argument is altijd het pad naar het script. Mocht je argument spaties bevatten, dan kun je het tussen quotes zetten (denk bijvoorbeeld aan database connecties). Onder ‘Start in’ zet je de locatie van de logfiles.

Dit voorbeeld heeft geen argumenten, hier hoef je dus alleen het pad naar het script neerzetten.

Eigen script

Een gevolg van het exporteren van een model naar Python is dat je bij elke aanpassing het model opnieuw moet exporteren en dat gaat ten koste van het automatiseren. Om dit op te lossen, kun je ook een script maken om het model aan te roepen, net zoals je een standaard tool in ArcPy aanroept. 

Het maken van een eigen script om een model aan te roepen gaat alsvolgt: (eventueel kun je het voorbeeld hieronder gebruiken). In het script importeer je de toolbox en voeg je het model toe, zoals je ook een standaard tool zal toevoegen, inclusief argumenten. In het voorbeeld hieronder is ook logging toegevoegd om eventuele problemen tijdens het uitvoeren van het model te registreren. 

Als je dit script direct aan de Task Scheduler toevoegt, heb je niet de mogelijkheid om de verkregen logging weg te schrijven. Om dit op te lossen, kun je gebruik maken van een batchbestand (.bat). Dit is een tekstbestand waarin je alle argumenten wegschrijft, inclusief het pad naar Python. In de Task Scheduler verwijs je vervolgens naar het batchbestand in plaats van het Python-programma. 

De argumenten moeten ook hier op de juiste volgorde geplaatst worden. Het gedeelte ‘>> D:\TTT\ImporterenCSV.log’ verwijst naar het logbestand. 

Generiek script

Het generieke script kun je gebruiken om alle soorten tools of modellen te automatiseren. Het enige wat je moet doen is bepalen hoeveel argumenten het model gebruikt. Op basis hiervan geef je de argumenten op in de Task Scheduler. Zorg er wel voor dat je de argumenten in de juiste volgorde zet. Dit kun je achterhalen door het model te openen en te zien welke argumenten wanneer gevraagd worden.

Vervolgens kun je het script toevoegen als taak in de Task Scheduler en de argumenten opgeven. De eerste drie argumenten zijn het pad naar het script, het pad naar de toolbox, en de naam van de uit te voeren tool, gevolgd door de argumenten van de aan te roepen tool.

De argumenten: 

D:\TTT\RunArcGISModel.py D:\TTT\Importeren.tbx CSVtoDB D:\TTT\Ongevallen_PerWeek.csv "Database Connections\Connection to Testen@server.sde\Testen.dbo.VERKEERSONGELUKKEN"  

Zodra je een taak hebt toegevoegd, kun je deze testen door deze handmatig uit te voeren. Werkt je taak zoals verwacht? Gefeliciteerd! Je hebt de taak geautomatiseerd. 

Het generiek script is beschikbaar op GitHub: https://github.com/esrinederland/Tools-Tips-and-Tricks/blob/gh-pages/RunToolRun.py

Meer weten?

Lees meer over Scheduled Tasks

Het is ook mogelijk om een training te volgen, ga naar het trainingsaanbod met Python-trainingen

Heeft u vragen? Of heeft u nog een tip voor een tool? E-mail naar