[Baypiggies] Locating the directory you are executing from

Shannon -jj Behrens jjinux at gmail.com
Wed May 7 09:29:18 CEST 2008


Furthermore, if you run your script like "$ script.py", and it runs
because "." is in $PATH, I'm guessing that argv[0] won't have the full
path, but __file__ will.  (By the way, "." is not in my path.)

-jj

On Tue, May 6, 2008 at 11:04 PM, Atul Varma <varmaa at gmail.com> wrote:
> I think one nice thing about using __file__ is that it doesn't necessarily
> require your Python file to be the main script that's being executed, as
> sys.argv[0] does.  For instance, I could have my own script called "foo",
> and then import "bar", which loads something relative to its (i.e., bar's)
> location in the filesystem.  If "bar" uses sys.argv[0], it would find the
> path to foo, but if it uses __file__, it will always find the correct path
> regardless of whether it's imported as a module or run as a script.
>
> - Atul
>
>
>
> On Tue, May 6, 2008 at 10:22 PM, Kelly Yancey <kelly at nttmcl.com> wrote:
> >
> >
> >
> >
> > Shannon -jj Behrens wrote:
> >
> > > On Sun, May 4, 2008 at 1:15 PM, Aahz <aahz at pythoncraft.com> wrote:
> > >
> > > > On Sun, May 04, 2008, Jeff Younker wrote:
> > > >  >
> > > >  > I have a set of development scripts.  The scripts can potentially
> > > >  > be executed from many places.  They reference information which is
> > > >  > relative to their installation paths.  (These are build scripts.)
> > > >  >
> > > >  > The CI system can supply a fixed root, but when run by the
> developers
> > > >  > I'd like them to be runnable from anywhere in the project, and
> still
> > > >  > have them work.
> > > >
> > > >  If you're willing to require that the script directory NOT be on the
> > > >  path, just do some manipulation of sys.argv[0].  Otherwise, __file__
> is
> > > >  the right approach.
> > > >
> > >
> > > Heh, I have this same problem ;)
> > >
> > > -jj
> > >
> > >
> >
> >  Here is the snippet I've been using.  It supports running both as a
> python script and as a binary created by py2exe.  It also works on systems
> that return paths encoded with with non-ASCII character sets (e.g. non-U.S.
> version of Windows).
> >
> >    import locale
> >    import os
> >    import sys
> >
> >    if hasattr(sys, 'frozen'):
> >        # Running as executable generated by py2exe.
> >        runpath = sys.executable
> >    else:
> >        # Running as python script.
> >        runpath = sys.argv[0]
> >    rundir = os.path.dirname(unicode(runpath,
> >                                     locale.getpreferredencoding()))
> >
> >  I am curious though: how is extracting the path from __file__ better than
> extracting it from sys.argv[0]?  The best I can tell (from simple test
> scripts) is that both yield the same results.
> >
> >  Kelly
> >
> > --
> > Kelly Yancey
> > http://kbyanc.blogspot.com/
> >
> >
> >
> >
> > _______________________________________________
> > Baypiggies mailing list
> > Baypiggies at python.org
> > To change your subscription options or unsubscribe:
> > http://mail.python.org/mailman/listinfo/baypiggies
> >
>
>



-- 
I, for one, welcome our new Facebook overlords!
http://jjinux.blogspot.com/


More information about the Baypiggies mailing list