Re: portable way of locating an executable (like which)

Discussion in 'Python' started by Hans Mulder, Sep 21, 2012.

  1. Hans Mulder

    Hans Mulder Guest

    On 21/09/12 04:31:17, Dave Angel wrote:
    > On 09/20/2012 06:04 PM, Jason Swails wrote:
    >> On Thu, Sep 20, 2012 at 5:06 PM, Gelonida N <> wrote:
    >>
    >>> I'd like to implement the equivalent functionality of the unix command
    >>> /usr/bin/which
    >>>
    >>> The function should work under Linux and under windows.
    >>>
    >>> Did anybody already implement such a function.
    >>> If not, is there a portable way of splitting the environment variable PATH?
    >>>

    >> I've used the following in programs I write:
    >>
    >> def which(program):
    >> def is_exe(fpath):
    >> return os.path.exists(fpath) and os.access(fpath, os.X_OK)
    >>
    >> fpath, fname = os.path.split(program)
    >> if fpath:
    >> if is_exe(program):
    >> return program
    >> else:
    >> for path in os.getenv("PATH").split(os.pathsep):


    On Posix systems, you need to insert at this point:

    if not path:
    path = "."

    >> exe_file = os.path.join(path, program)
    >> if is_exe(exe_file):
    >> return exe_file
    >> return None
    >>
    >> IIRC, I adapted it from StackOverflow. I know it works on Linux and Mac OS
    >> X, but not sure about windows (since I don't know if PATH works the same
    >> way there).

    >
    > I don't have a Windows machine set up right now, but I believe there are
    > two more directories to search, besides the ones described in the PATH
    > variable.
    >
    > One is the current directory, and the other is the Windows directory
    > (maybe also the xxx/system32 or something).
    >
    > They don't have analogues in Linux or Mac, as far as I know.


    On Posix system (inlcuding Linux and Mac OS X), the current
    directory is not searched by default. If there's an empty
    string in os.getenv("PATH").split(os.pathsep), then the
    current directory will be searched at that point in the part.


    Hope this helps,

    -- HansM
    Hans Mulder, Sep 21, 2012
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Gelonida N
    Replies:
    4
    Views:
    197
    Ramchandra Apte
    Sep 23, 2012
  2. Mark Lawrence
    Replies:
    0
    Views:
    157
    Mark Lawrence
    Sep 20, 2012
  3. Chris Angelico
    Replies:
    0
    Views:
    184
    Chris Angelico
    Sep 20, 2012
  4. Ian Kelly
    Replies:
    0
    Views:
    197
    Ian Kelly
    Sep 20, 2012
  5. Chris Angelico
    Replies:
    0
    Views:
    201
    Chris Angelico
    Sep 21, 2012
Loading...

Share This Page