5

I am looking for a way to access a GP tool running in a Python script to be able to see how much of the job has already been done.

I have found SetProgressor function, but this one is available only when running script tools via ArcGIS Desktop GUI. I am in contrary interested in obtaining the information on the progress via the code. This is to be able to track on the execution of the tool (this will be reported to a user which has triggered running the code). I don't run the code inside the ArcGIS Desktop application session.

So, for instance, when calling the Buffer GP tool on a polygon feature class (via arcpy.analysis.Buffer), I want to get an estimate from the tool after several seconds how much (in %) of the work was already done and this information should be possible access via the code.

1
  • Probably ought to be merged, since this Answer is more complete.
    – Vince
    Commented Sep 5, 2019 at 20:23

2 Answers 2

5

You can't get this information as the Python script will block until the tool has finished running.

4
  • 2
    ArcGIS server geoprocessing services can be called asynchronously. However, I doubt that it is possible to get any progress via the results-object when polling the status of the job from standard tools.
    – Stefan
    Commented Oct 16, 2014 at 7:37
  • 1
    @Stefan True, the result object doesn't include any way to access the progressor. Commented Oct 16, 2014 at 14:48
  • @JasonScheirer, thank you. Any other suggestions on how this kind of logic could be implemented with arcpy/Python? Or at least something close? Commented Oct 17, 2014 at 7:20
  • @AlexTereshenkov you could go the comtypes and invoke GP tools via ArcObjects. If you implement your own TrackCancel object you get feedback as the tool executes. You could also look into the GeoprocessorEvents sink. Commented Oct 17, 2014 at 14:42
2

You cannot get current status of the tool execution when it has been executed in Python (arcpy). The tool would have to execute Asynchronously, not blocking your application to support this. If it was Async you'd assign the execution call to a variable and check the variable status. Thats exactly how a GP Service works. But your scenario is calling a tool in Desktop, and this execution mode is essentially Synchronous: you execute the tool and your script "freezes" till its done.

Looking at multiprocessing or similar techniques will not help. The thread or job you launch won't return anything until the tool is finished.

In short, percentage complete is a capability of the UI.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.