<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Get script folder from a script tool in a toolbox in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444387#M34808</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Never saw inspect used for that before. Cool.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I did a little experimenting to see what you get in different Python contexts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In many situations &lt;/SPAN&gt;&lt;STRONG&gt;inspect&lt;/STRONG&gt;&lt;SPAN&gt; gives you more information.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
# file test.py
import sys
import inspect
def x():
&amp;nbsp; print "inspect: ",repr(inspect.getfile(inspect.currentframe()))
&amp;nbsp; print "sys.argv[0]: ", repr(sys.argv[0])

x()
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Running python script (like script tool):&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
D:\Users\cprice&amp;gt;C:\Python27\ArcGIS10.1\python.exe test.py
inspect:&amp;nbsp; 'test.py'
sys.argv[0]:&amp;nbsp; 'test.py'&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Import:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
D:\Users\cprice&amp;gt;C:\Python27\ArcGIS10.1\python.exe
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
&amp;gt;&amp;gt;&amp;gt; import test
inspect:&amp;nbsp; &lt;SPAN style="color:red;"&gt;'test.py'&lt;/SPAN&gt;
sys.argv[0]:&amp;nbsp; ''
&amp;gt;&amp;gt;&amp;gt; test.x()
inspect:&amp;nbsp; 'test.py'
sys.argv[0]:&amp;nbsp; ''
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It should be noted that imported modules have a __file__ property - handy if you're not sure which source of a module you imported...&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; import test
&amp;gt;&amp;gt;&amp;gt; test.__file__
'test.py'
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Interactive, pasting test.py at the &amp;gt;&amp;gt;&amp;gt; prompt (like pasting to ArcGIS Desktop python window):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The inspect method reports that your at the python prompt (&amp;lt;stdin&amp;gt;).&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; import sys
&amp;gt;&amp;gt;&amp;gt; import inspect
&amp;gt;&amp;gt;&amp;gt; def x():
...&amp;nbsp;&amp;nbsp; print "inspect: ",repr(inspect.getfile(inspect.currentframe()))
...&amp;nbsp;&amp;nbsp; print "sys.argv[0]: ", repr(sys.argv[0])
...
&amp;gt;&amp;gt;&amp;gt; x()
inspect:&amp;nbsp; &lt;SPAN style="color:red;"&gt;'&amp;lt;stdin&amp;gt;'&lt;/SPAN&gt;
sys.argv[0]:&amp;nbsp; ''
&amp;gt;&amp;gt;&amp;gt;
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And what if we're not sure which flavor of Python we picked up (say you've got multiple version of Python installed, say, x64 Desktop processing or the Enthought Python distribution, etc.)&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; import sys
&amp;gt;&amp;gt;&amp;gt; sys.version
'2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'
&amp;gt;&amp;gt;&amp;gt; sys.executable
'C:\\Python27\\ArcGIS10.1\\python.exe'
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the Desktop Python command line - you get this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
sys.version
'2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'
&amp;gt;&amp;gt;&amp;gt; sys.executable
'C:\\ArcGIS\\Desktop10.1\\bin\\ArcMap.exe'
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and.. inside Calculate Value in ModelBuilder:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
def x():
&amp;nbsp; import sys
&amp;nbsp; import inspect
&amp;nbsp; f = "inspect: %s" + chr(10) + "sys.argv[0]: %s" + chr(10) + \
&amp;nbsp;&amp;nbsp;&amp;nbsp; "sys.version: %s" + chr(10) + "sys.executable: %s" 
&amp;nbsp; return f % \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (repr(inspect.getfile(inspect.currentframe())), 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; repr(sys.argv[0]),sys.version,sys.executable)
--
Executing (Calculate Value): CalculateValue x() "def x():\n&amp;nbsp; import sys\n&amp;nbsp; import inspect\n&amp;nbsp; f = "inspect: %s" + chr(10) + "sys.argv[0]: %s" + chr(10) + "sys.version: %s" + chr(10) + "sys.executable: %s" \n&amp;nbsp; return f % \\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (repr(inspect.getfile(inspect.currentframe())), repr(sys.argv[0]),sys.version,sys.executable)\n" Variant
Start Time: Wed Feb 06 10:37:05 2013
Value = inspect: &lt;SPAN style="color:red;"&gt;'&amp;lt;string&amp;gt;'&lt;/SPAN&gt;
sys.argv[0]: ''
sys.version: 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
sys.executable: C:\ArcGIS\Desktop10.1\bin\ArcMap.exe
Succeeded at Wed Feb 06 10:37:05 2013 (Elapsed Time: 0.00 seconds)
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 19:52:27 GMT</pubDate>
    <dc:creator>curtvprice</dc:creator>
    <dc:date>2021-12-11T19:52:27Z</dc:date>
    <item>
      <title>Get script folder from a script tool in a toolbox</title>
      <link>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444383#M34804</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have some custom ArcGIS toolboxes containing script tools (v10.0 and v10.1) written in Python.&amp;nbsp; Is there a way in Python to get the folder path of the script tool that is being executed?&amp;nbsp;&amp;nbsp; I tried &lt;/SPAN&gt;&lt;PRE class="plain" name="code"&gt;os.getcwd()&lt;/PRE&gt;&lt;SPAN&gt; but that returns the default path for the MXD in which the tool is running, which usually isn't in the same location as the script tool(s).&amp;nbsp; And, the &lt;/SPAN&gt;&lt;PRE class="plain" name="code"&gt;arcpy.env.workspace&lt;/PRE&gt;&lt;SPAN&gt; property isn't an option for my scripts.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm likely missing something obvious.&amp;nbsp; Any help appreciated!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lisa&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Feb 2013 22:14:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444383#M34804</guid>
      <dc:creator>LisaNelson</dc:creator>
      <dc:date>2013-02-05T22:14:14Z</dc:date>
    </item>
    <item>
      <title>Re: Get script folder from a script tool in a toolbox</title>
      <link>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444384#M34805</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I have some custom ArcGIS toolboxes containing script tools (v10.0 and v10.1) written in Python.&amp;nbsp; Is there a way in Python to get the folder path of the script tool that is being executed?&amp;nbsp;&amp;nbsp; &lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Try:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import sys
import os
print sys.argv[0] 
print os.path.dirname(sys.argv[0])
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note this is the path of the python script - not the toolbox.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:52:25 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444384#M34805</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2021-12-11T19:52:25Z</dc:date>
    </item>
    <item>
      <title>Re: Get script folder from a script tool in a toolbox</title>
      <link>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444385#M34806</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I use something akin to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;import inspect, os&amp;nbsp; scriptName = inspect.getfile( inspect.currentframe() ) scriptFolder =&amp;nbsp; os.path.split(scriptName)[0]&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2013 11:54:23 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444385#M34806</guid>
      <dc:creator>GeorgeNewbury</dc:creator>
      <dc:date>2013-02-06T11:54:23Z</dc:date>
    </item>
    <item>
      <title>Re: Get script folder from a script tool in a toolbox</title>
      <link>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444386#M34807</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thank you both!&amp;nbsp; Either approach works!&amp;nbsp;&amp;nbsp; I used this syntax: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code jive_text_macro"&gt;os.path.split(inspect.getfile(inspect.currentframe()))[0]&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lisa&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2013 14:52:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444386#M34807</guid>
      <dc:creator>LisaNelson</dc:creator>
      <dc:date>2013-02-06T14:52:14Z</dc:date>
    </item>
    <item>
      <title>Re: Get script folder from a script tool in a toolbox</title>
      <link>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444387#M34808</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Never saw inspect used for that before. Cool.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I did a little experimenting to see what you get in different Python contexts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In many situations &lt;/SPAN&gt;&lt;STRONG&gt;inspect&lt;/STRONG&gt;&lt;SPAN&gt; gives you more information.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
# file test.py
import sys
import inspect
def x():
&amp;nbsp; print "inspect: ",repr(inspect.getfile(inspect.currentframe()))
&amp;nbsp; print "sys.argv[0]: ", repr(sys.argv[0])

x()
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Running python script (like script tool):&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
D:\Users\cprice&amp;gt;C:\Python27\ArcGIS10.1\python.exe test.py
inspect:&amp;nbsp; 'test.py'
sys.argv[0]:&amp;nbsp; 'test.py'&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Import:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
D:\Users\cprice&amp;gt;C:\Python27\ArcGIS10.1\python.exe
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
&amp;gt;&amp;gt;&amp;gt; import test
inspect:&amp;nbsp; &lt;SPAN style="color:red;"&gt;'test.py'&lt;/SPAN&gt;
sys.argv[0]:&amp;nbsp; ''
&amp;gt;&amp;gt;&amp;gt; test.x()
inspect:&amp;nbsp; 'test.py'
sys.argv[0]:&amp;nbsp; ''
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It should be noted that imported modules have a __file__ property - handy if you're not sure which source of a module you imported...&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; import test
&amp;gt;&amp;gt;&amp;gt; test.__file__
'test.py'
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Interactive, pasting test.py at the &amp;gt;&amp;gt;&amp;gt; prompt (like pasting to ArcGIS Desktop python window):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The inspect method reports that your at the python prompt (&amp;lt;stdin&amp;gt;).&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; import sys
&amp;gt;&amp;gt;&amp;gt; import inspect
&amp;gt;&amp;gt;&amp;gt; def x():
...&amp;nbsp;&amp;nbsp; print "inspect: ",repr(inspect.getfile(inspect.currentframe()))
...&amp;nbsp;&amp;nbsp; print "sys.argv[0]: ", repr(sys.argv[0])
...
&amp;gt;&amp;gt;&amp;gt; x()
inspect:&amp;nbsp; &lt;SPAN style="color:red;"&gt;'&amp;lt;stdin&amp;gt;'&lt;/SPAN&gt;
sys.argv[0]:&amp;nbsp; ''
&amp;gt;&amp;gt;&amp;gt;
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And what if we're not sure which flavor of Python we picked up (say you've got multiple version of Python installed, say, x64 Desktop processing or the Enthought Python distribution, etc.)&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; import sys
&amp;gt;&amp;gt;&amp;gt; sys.version
'2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'
&amp;gt;&amp;gt;&amp;gt; sys.executable
'C:\\Python27\\ArcGIS10.1\\python.exe'
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the Desktop Python command line - you get this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
sys.version
'2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'
&amp;gt;&amp;gt;&amp;gt; sys.executable
'C:\\ArcGIS\\Desktop10.1\\bin\\ArcMap.exe'
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and.. inside Calculate Value in ModelBuilder:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
def x():
&amp;nbsp; import sys
&amp;nbsp; import inspect
&amp;nbsp; f = "inspect: %s" + chr(10) + "sys.argv[0]: %s" + chr(10) + \
&amp;nbsp;&amp;nbsp;&amp;nbsp; "sys.version: %s" + chr(10) + "sys.executable: %s" 
&amp;nbsp; return f % \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (repr(inspect.getfile(inspect.currentframe())), 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; repr(sys.argv[0]),sys.version,sys.executable)
--
Executing (Calculate Value): CalculateValue x() "def x():\n&amp;nbsp; import sys\n&amp;nbsp; import inspect\n&amp;nbsp; f = "inspect: %s" + chr(10) + "sys.argv[0]: %s" + chr(10) + "sys.version: %s" + chr(10) + "sys.executable: %s" \n&amp;nbsp; return f % \\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (repr(inspect.getfile(inspect.currentframe())), repr(sys.argv[0]),sys.version,sys.executable)\n" Variant
Start Time: Wed Feb 06 10:37:05 2013
Value = inspect: &lt;SPAN style="color:red;"&gt;'&amp;lt;string&amp;gt;'&lt;/SPAN&gt;
sys.argv[0]: ''
sys.version: 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
sys.executable: C:\ArcGIS\Desktop10.1\bin\ArcMap.exe
Succeeded at Wed Feb 06 10:37:05 2013 (Elapsed Time: 0.00 seconds)
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:52:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/get-script-folder-from-a-script-tool-in-a-toolbox/m-p/444387#M34808</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2021-12-11T19:52:27Z</dc:date>
    </item>
  </channel>
</rss>

