Book Image

Programming ArcGIS with Python Cookbook, Second Edition

By : Donald Eric Pimpler, Eric Pimpler
Book Image

Programming ArcGIS with Python Cookbook, Second Edition

By: Donald Eric Pimpler, Eric Pimpler

Overview of this book

Table of Contents (22 chapters)
Programming ArcGIS with Python Cookbook Second Edition
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Using sys.argv[ ] to capture command-line input


Instead of hardcoding your scripts with paths to specific datasets, you can make your scripts more flexible by allowing them to accept input in the form of parameters from the command prompt. These input parameters can be captured using Python's sys.argv[] object.

Getting ready

Python's sys.argv[] object allows you to capture input parameters from the command line when a script is executed. We will use an example to illustrate how this works. Take a look at the following screenshot:

Each word must be separated by a space. These words are stored in a zero-based list object called sys.argv[]. In the sys.argv[] object, the first item in the list referenced by the 0 index, stores the name of the script. In this case, it would be ListFields.py. Each successive word is referenced by the next integer. Therefore, the first parameter (c:\ArcpyBook\data) will be stored in sys.argv[1], and the second parameter (Burglaries.shp) will be stored in sys.argv[2]. Each of the arguments in the sys.argv[] object can be accessed and used inside your geoprocessing script. In this recipe, you're going to update the ListFields.py script so that it accepts input parameters from the command line.

How to do it...

Follow these steps to create a Python script that can accept input parameters from the command prompt, using sys.argv[]:

  1. Open C:\ArcpyBook\Appendix1\ListFields.py in IDLE.

  2. Import the sys module:

    import arcpy
    import sys
  3. Create a variable to hold the workspace that will be passed into the script:

    wkspace = sys.argv[1]
  4. Create a variable to hold the feature class that will be passed into the script:

    fc = sys.argv[2]
  5. Update the lines of code that set the workspace and call the ListFields() function:

    arcpy.env.workspace = wkspace
    fields = arcpy.ListFields(fc)

    Your completed script should appear as follows:

    import arcpy
    import sys
    wkspace = sys.argv[1]
    fc = sys.argv[2]
    try:
      arcpy.env.workspace = wkspace
      fields = arcpy.ListFields(fc)
      for fld in fields:
        print(fld.name)
    except Exception as e:
      print(e.message)
  6. You can check your work by examining the C:\ArcpyBook\code\Appendix1\ListFields_Step2.py solution file.

  7. Save the script.

  8. If necessary, open the command prompt and navigate to C:\ArcpyBook\Appendix1.

  9. On the command line, type the following and press the Enter key:

    python ListFields.py c:\ArcpyBook\data Burglaries_2009.shp
  10. Once again, you should see the output detailing the attribute fields for the Burglaries_2009.shp file. The difference is that your script no longer has a hardcoded workspace and feature class name. You now have a more flexible script, which is capable of listing the attribute fields for any feature class.

How it works...

The sys module contains a list object called argv[], which is used to store the input parameters for the command-line execution of a Python script. The first item stored in the list is always the name of the script. So, in this case, sys.argv[0] contains ListFields.py. Two parameters are passed into the script, including the workspace and a feature class. These are stored in sys.argv[1] and sys.argv[2], respectively. These values are then assigned to variables and used in the script.