http://spatialgalaxy.net//2013/03/18/new-version-of-the-qgis-script-runner-plugin/<br><br>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="padding: 4px; background-color: #c3d9ff;"><h3 style="margin:0px 3px;font-family:sans-serif">Enviado para você por termal12 através do Google Reader:</h3></div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="font-family:sans-serif;overflow:auto;width:100%;margin: 0px 10px"><h2 style="margin: 0.25em 0 0 0"><div class=""><a href="http://spatialgalaxy.net//2013/03/18/new-version-of-the-qgis-script-runner-plugin/">New Version of the QGIS Script Runner Plugin</a></div></h2>
<div style="margin-bottom: 0.5em">via <a href="http://planet.osgeo.org" class="f">Planet OSGeo</a>  em 18/03/13</div><br style="display:none">
<div><p>The Script Runner plugin allows you to manage and execute a collection of scripts in QGIS to automate tasks and perform custom processing.</p>

<p><img alt="Script_Runner" src="http://spatialgalaxy.net//images/script_runner_06.png"></p>

<p>Version 0.6 of Script Runner has been released and includes these changes:</p>




<ul>
<li>Arguments can be passed to a script using keyword arguments</li>
<li>Script output is logged to the Script Runner window</li>
<li>Script output can be logged to disk</li>
<li>Preferences dialog allows control of output and logging options</li>
<li>Exceptions in scripts are displayed without interfering with console/logging output</li>
<li>Context menu (right-click) to access script functions</li>
<li>Edit script function uses system default editor or one you specify in preferences</li>
</ul>


<p>For a basic introduction to Script Runner see this post: <a href="http://spatialgalaxy.net//2012/01/29/script-runner-a-plugin-to-run-python-scripts-in-qgis">Script Runner: A Plugin to Run Python Scripts in QGIS</a></p>

<h3>Working with Scripts</h3>

<h4>Adding Scripts</h4>

<p>To run a script, you must add it to Script Runner using the <code>Add Script</code> tool on
the toolbar. Select the script from the file dialog to add it to a list in the left panel. The list of scripts
is persisted between uses of QGIS.</p>

<h4>Running a Script</h4>

<p>To run a script, select it from your list of scripts and click the <code>Run</code> tool. Output from the script will be displayed in the Script Runner console</p>

<h4>Remove a Script</h4>

<p>You can remove a script by selecting it from the list and clicking the <code>Remove Script</code> tool. This just removes it from the list; it does nothing to the script
file on disk.</p>

<h4>Script Information</h4>

<p>Clicking the <code>Info</code> tool will populate
the Info and Source tabs in the panel on the right. The Info tab contains the
docstring from your module and then a list of the classes, methods, and
functions found in the script. Having a proper docstring at the head of your
script will help you determine the purpose of script.</p>

<p><em>At version 0.6 the <code>Info</code> tool is only needed if you have disabled automatic display of info/source (see <a href="http://spatialgalaxy.net/feed/#preferences">Preferences</a>).</em></p>

<h4>Viewing the Source</h4>

<p>You can view the source of the script on the Source tab. This allows you to
quickly confirm that you are using the right script and it does what you think
it will.</p>

<h3>New Features</h3>

<p>Version 0.6 implements a number of new features.</p>

<h4>Passing Arguments to a Script</h4>

<p>You can pass arguments to your script using keywords. Your <em>run_script</em> function must have two arguments:</p>

 <div><table><tbody><tr><td><pre><span>1</span>
</pre></td><td><pre><code><span>  <span>def</span> <span>run_script</span><span>(</span><span>iface</span><span>,</span> <span>**</span><span>args</span><span>):</span>
</span></code></pre></td></tr></tbody></table></div>


<p>Running your script is done using the <code>Run script with arguments</code> tool. This prompts you to enter your argument(s) in a key=value format:</p>

<p><img alt="Argument_dialog" src="http://spatialgalaxy.net//images/argument_dialog.png"></p>

<p>All strings must be quoted and multiple arguments should be separated by a comma.</p>

<p>When your script is run, the arguments are contained in <em>args</em>, which is a Python dict. In the example above, you could access them like this:</p>

 <div><table><tbody><tr><td><pre><span>1</span>
<span>2</span>
</pre></td><td><pre><code><span>  <span>my_path</span> <span>=</span> <span>args</span><span>[</span><span>'path'</span><span>]</span>
</span><span>  <span>my_buffer_size</span> <span>=</span> <span>args</span><span>[</span><span>'buffer_size'</span><span>]</span>
</span></code></pre></td></tr></tbody></table></div>


<p>Scripts that accept keyword arguments are displayed in the list with two asterisks appended to their name:</p>

<p><img alt="arg_scripts" src="http://spatialgalaxy.net//images/scripts_with_args.png"></p>

<p>See <a href="http://spatialgalaxy.net/feed/#passing_arguments">Passing Arguments</a> for a complete example.</p>

<h4>Output Console</h4>

<p>All <code>print</code> statements in your script will be directed to the Script Runner console. In addition, any tracebacks from exceptions will be displayed there, as well as in a popup dialog.</p>

<p>Printing messages to the console can be useful for both development and status updates in long running scripts. You can clear the console using the <code>Clear Console</code> tool. There is also an option in Preferences to clear the console each time a script is run.</p>

<h4>Logging to Disk</h4>

<p>You can choose to log everything that goes to the output console to disk. Use the Preferences dialog to setup the directory where the scriptrunner.log will be written.</p>

<h4>Editing a Script</h4>

<p>You can open the selected script in an external editor by right-clicking on it and choosing <code>Edit script in external editor</code> from the popup menu. The default system editor for <em>.py</em> files will be used to open the script. In Preferences, you can specify a different editor by entering the full path to the executable.</p>

<p><a></a></p>

<h4>Preferences</h4>

<p>The Preferences dialog allows you to set the following options:</p>

<p><img alt="Script_Runner_Preferences" src="http://spatialgalaxy.net//images/sr_preferences_dialog.png"></p>

<h3>Script Examples</h3>

<p>Here are three script examples: a simple script that has only a
<em>run_script</em> function, one that uses a Python class, and one that passes keyword arguments.</p>

<h4>Simple Script</h4>

<p>This simple script contains only a <em>run_script</em> function:</p>

 <div><table><tbody><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
<span>18</span>
</pre></td><td><pre><code><span>    <span>""" Load a layer and change the fill color to red. """</span>
</span><span>    <span>from</span> <span>PyQt4.QtCore</span> <span>import</span> <span>*</span>
</span><span>    <span>from</span> <span>PyQt4.QtGui</span> <span>import</span> <span>*</span>
</span><span>    <span>from</span> <span>qgis.core</span> <span>import</span> <span>*</span>
</span><span>    <span>from</span> <span>qgis.gui</span> <span>import</span> <span>*</span>
</span><span>
</span><span>
</span><span>    <span>def</span> <span>run_script</span><span>(</span><span>iface</span><span>):</span>
</span><span>        <span>mapreg</span> <span>=</span> <span>QgsMapLayerRegistry</span><span>.</span><span>instance</span><span>()</span>
</span><span>        <span>mapreg</span><span>.</span><span>removeAllMapLayers</span><span>()</span>
</span><span>        <span>wb</span> <span>=</span> <span>QgsVectorLayer</span><span>(</span><span>'/data/world_borders.shp'</span><span>,</span> <span>'world_borders'</span><span>,</span> <span>'ogr'</span><span>)</span>
</span><span>        <span>mapreg</span><span>.</span><span>instance</span><span>()</span><span>.</span><span>addMapLayer</span><span>(</span><span>wb</span><span>)</span>
</span><span>        <span>renderer</span> <span>=</span> <span>wb</span><span>.</span><span>rendererV2</span><span>()</span>
</span><span>        <span>symb</span> <span>=</span> <span>renderer</span><span>.</span><span>symbol</span><span>()</span>
</span><span>        <span>symb</span><span>.</span><span>setColor</span><span>(</span><span>QColor</span><span>(</span><span>Qt</span><span>.</span><span>red</span><span>))</span>
</span><span>        <span>wb</span><span>.</span><span>setCacheImage</span><span>(</span><span>None</span><span>)</span>
</span><span>        <span>wb</span><span>.</span><span>triggerRepaint</span><span>()</span>
</span><span>        <span>iface</span><span>.</span><span>refreshLegend</span><span>(</span><span>wb</span><span>)</span>
</span></code></pre></td></tr></tbody></table></div>


<p>When executed by Script Runner, the script removes any layers currently
on the map, then loads the <code>world_borders</code> shapefile, sets its fill color to
red, and updates the map canvas and the legend. The
<em>run_script</em> function does all the work. You could expand this script by
adding additional functions that are called from <em>run_script</em>.</p>

<h4>A Script with a Class</h4>

<p>This script uses a class that is initialized from the <em>run_script</em> function to load some layers:</p>

 <div><table><tbody><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
<span>18</span>
<span>19</span>
<span>20</span>
<span>21</span>
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
</pre></td><td><pre><code><span>    <span>"""Load all shapefiles in a given directory.  """</span>
</span><span>    <span>from</span> <span>glob</span> <span>import</span> <span>glob</span>
</span><span>    <span>from</span> <span>os</span> <span>import</span> <span>path</span>
</span><span>
</span><span>    <span>from</span> <span>qgis.core</span> <span>import</span> <span>*</span>
</span><span>    <span>from</span> <span>qgis.gui</span> <span>import</span> <span>*</span>
</span><span>    <span>import</span> <span>qgis.utils</span>
</span><span>
</span><span>    <span>class</span> <span>Loader</span><span>:</span>
</span><span>        <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>iface</span><span>):</span>
</span><span>            <span>"""Initialize using the qgis.utils.iface</span>
</span><span><span>            object passed from the console.</span>
</span><span><span>            """</span>
</span><span>
</span><span>            <span>self</span><span>.</span><span>iface</span> <span>=</span> <span>qgis</span><span>.</span><span>utils</span><span>.</span><span>iface</span>
</span><span>
</span><span>        <span>def</span> <span>load_shapefiles</span><span>(</span><span>self</span><span>,</span> <span>shp_path</span><span>):</span>
</span><span>            <span>"""Load all shapefiles found in shp_path"""</span>
</span><span>            <span>print</span> <span>"Loading shapes from </span><span>%s</span><span>"</span> <span>%</span> <span>path</span><span>.</span><span>join</span><span>(</span><span>shp_path</span><span>,</span> <span>"*.shp"</span><span>)</span>
</span><span>            <span>shps</span> <span>=</span> <span>glob</span><span>(</span><span>path</span><span>.</span><span>join</span><span>(</span><span>shp_path</span><span>,</span> <span>"*.shp"</span><span>))</span>
</span><span>            <span>for</span> <span>shp</span> <span>in</span> <span>shps</span><span>:</span>
</span><span>                <span>(</span><span>shpdir</span><span>,</span> <span>shpfile</span><span>)</span> <span>=</span> <span>path</span><span>.</span><span>split</span><span>(</span><span>shp</span><span>)</span>
</span><span>                <span>print</span> <span>"Loading </span><span>%s</span><span>"</span> <span>%</span> <span>shpfile</span>
</span><span>                <span>lyr</span> <span>=</span> <span>QgsVectorLayer</span><span>(</span><span>shp</span><span>,</span> <span>shpfile</span><span>,</span> <span>'ogr'</span><span>)</span>
</span><span>                <span>QgsMapLayerRegistry</span><span>.</span><span>instance</span><span>()</span><span>.</span><span>addMapLayer</span><span>(</span><span>lyr</span><span>)</span>
</span><span>
</span><span>    <span>def</span> <span>run_script</span><span>(</span><span>iface</span><span>):</span>
</span><span>        <span>ldr</span> <span>=</span> <span>Loader</span><span>(</span><span>iface</span><span>)</span>
</span><span>        <span>print</span> <span>"Loading all shapefiles in /qgis_sample_data/vmap0_shapefiles"</span>
</span><span>        <span>ldr</span><span>.</span><span>load_shapefiles</span><span>(</span><span>'/qgis_sample_data/vmap0_shapefiles'</span><span>)</span>
</span></code></pre></td></tr></tbody></table></div>


<p>In this example, the <em>run_script</em> function creates an instance (<code>ldr</code>) of a
class named <em>Loader</em> that is defined in the same source file. It then calls a
method in the <em>Loader</em> class named <em>load_shapefiles</em> to do something
useful—in this case, load all the shapefiles in a specified directory.</p>

<p><a></a></p>

<h4>Passing Arguments</h4>

<p>This script illustrates passing an argument (a path) to load all shapefiles in a directory:</p>

 <div><table><tbody><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
<span>18</span>
<span>19</span>
<span>20</span>
<span>21</span>
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
</pre></td><td><pre><code><span>    <span>"""Load all shapefiles in a given directory."""</span>
</span><span>    <span>from</span> <span>glob</span> <span>import</span> <span>glob</span>
</span><span>    <span>from</span> <span>os</span> <span>import</span> <span>path</span>
</span><span>    <span>from</span> <span>qgis.core</span> <span>import</span> <span>*</span>
</span><span>    <span>from</span> <span>qgis.gui</span> <span>import</span> <span>*</span>
</span><span>    <span>import</span> <span>qgis.utils</span>
</span><span>
</span><span>
</span><span>    <span>class</span> <span>Loader</span><span>:</span>
</span><span>        <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>iface</span><span>):</span>
</span><span>            <span>"""Initialize using the qgis.utils.iface </span>
</span><span><span>            object passed from the console.</span>
</span><span><span> </span>
</span><span><span>            """</span>
</span><span>            <span>self</span><span>.</span><span>iface</span> <span>=</span> <span>qgis</span><span>.</span><span>utils</span><span>.</span><span>iface</span>
</span><span>
</span><span>        <span>def</span> <span>load_shapefiles</span><span>(</span><span>self</span><span>,</span> <span>shp_path</span><span>):</span>
</span><span>            <span>"""Load all shapefiles found in shp_path"""</span>
</span><span>            <span>print</span> <span>"Loading shapes from </span><span>%s</span><span>"</span> <span>%</span> <span>path</span><span>.</span><span>join</span><span>(</span><span>shp_path</span><span>,</span> <span>"*.shp"</span><span>)</span>
</span><span>            <span>shps</span> <span>=</span> <span>glob</span><span>(</span><span>path</span><span>.</span><span>join</span><span>(</span><span>shp_path</span><span>,</span> <span>"*.shp"</span><span>))</span>
</span><span>            <span>for</span> <span>shp</span> <span>in</span> <span>shps</span><span>:</span>
</span><span>                <span>(</span><span>shpdir</span><span>,</span> <span>shpfile</span><span>)</span> <span>=</span> <span>path</span><span>.</span><span>split</span><span>(</span><span>shp</span><span>)</span>
</span><span>                <span>print</span> <span>"Loading </span><span>%s</span><span>"</span> <span>%</span> <span>shpfile</span>
</span><span>                <span>lyr</span> <span>=</span> <span>QgsVectorLayer</span><span>(</span><span>shp</span><span>,</span> <span>shpfile</span><span>,</span> <span>'ogr'</span><span>)</span>
</span><span>                <span>QgsMapLayerRegistry</span><span>.</span><span>instance</span><span>()</span><span>.</span><span>addMapLayer</span><span>(</span><span>lyr</span><span>)</span>
</span><span>
</span><span>    <span>def</span> <span>run_script</span><span>(</span><span>iface</span><span>,</span> <span>**</span><span>args</span><span>):</span>
</span><span>        <span>ldr</span> <span>=</span> <span>Loader</span><span>(</span><span>iface</span><span>)</span>
</span><span>        <span>print</span> <span>"Loading all shapefiles in </span><span>%s</span><span>"</span> <span>%</span> <span>args</span><span>[</span><span>'path'</span><span>]</span>
</span><span>        <span>ldr</span><span>.</span><span>load_shapefiles</span><span>(</span><span>args</span><span>[</span><span>'path'</span><span>])</span>
</span></code></pre></td></tr></tbody></table></div>


<p>Lines 29 and 30 illustrate using the passed argument to print a message to the console and call the method to add the shapefiles to the map.</p>

<h2>Final Word</h2>

<p>The script examples are minimalistic—they don’t do error checking in a number of places, such as checking to see if a QgsVectorLayer is valid or if needed arguments were actually passed to the script. Don’t take the scripts as examples of complete, solid code.</p>

<p>Comments on this post are welcome, as are bug reports. The link to the <a href="http://hub.qgis.org/projects/scriptrunner">bug tracker</a> for Script Runner can be found in the <em>About</em> box, along with the link to the code repository and my email address.</p></div></div>
<br>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="padding: 4px; background-color: #c3d9ff;"><h3 style="margin:0px 3px;font-family:sans-serif">Coisas que você pode fazer a partir daqui:</h3>
<ul style="font-family:sans-serif"><li><a href="http://www.google.com/reader/view/feed%2Fhttp%3A%2F%2Fplanet.osgeo.org%2Fatom.xml?source=email">Inscrever-se no Planet OSGeo</a> usando o <b>Google Reader</b></li>
<li><a href="http://www.google.com/reader/?source=email">Começar a usar o Google Reader</a> para se manter facilmente atualizado sobre <b>todos os seus sites favoritos</b></li></ul></div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>