python os.path.exists failure

Discussion in 'Python' started by koranthala, Oct 31, 2009.

  1. koranthala

    koranthala Guest

    Hi all,
    My code is as follows:

    path = r'C:/"Program Files"/testfolder/2.3/test.txt'
    if os.path.lexists(path):
    print 'Path Exists'
    else:
    print 'No file found in path - %s' %path
    print Popen(path, stdout=PIPE, shell=True).stdout.read()

    The output comes as
    No file found in path - C:/"Program Files"/testfolder/2.3/test.txt
    but the test.txt file is opened.

    The issue, I guess, is that the double quotes inside is failing the
    check. But without the double quotes, Popen fails.
    One solution, I can think is to check without double quotes, and then
    using some code, put the double quotes back inside, but it looks quite
    kludgy.

    What is the usual solution to this?
    koranthala, Oct 31, 2009
    #1
    1. Advertising

  2. On Sat, Oct 31, 2009 at 11:26 AM, koranthala <> wrote:
    > Hi all,
    >   My code is as follows:
    >
    > path = r'C:/"Program Files"/testfolder/2.3/test.txt'
    > if os.path.lexists(path):
    >    print 'Path Exists'
    > else:
    >    print 'No file found in path - %s' %path
    > print Popen(path, stdout=PIPE, shell=True).stdout.read()
    >
    > The output comes as
    > No file found in path - C:/"Program Files"/testfolder/2.3/test.txt
    > but the test.txt file is opened.
    >
    > The issue, I guess, is that the double quotes inside is failing the
    > check. But without the double quotes, Popen fails.
    > One solution, I can think is to check without double quotes, and then
    > using some code, put the double quotes back inside, but it looks quite
    > kludgy.
    >


    Just out of curiosity, does 'C:/"Program FIles"/' even work on the
    Windows command line? The usual procedure is to put the entire path in
    quotes. r'"C:\Program Files\..."'.


    > What is the usual solution to this?
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >
    Benjamin Kaplan, Oct 31, 2009
    #2
    1. Advertising

  3. koranthala schreef:
    > Hi all,
    > My code is as follows:
    >
    > path = r'C:/"Program Files"/testfolder/2.3/test.txt'
    > if os.path.lexists(path):
    > print 'Path Exists'
    > else:
    > print 'No file found in path - %s' %path
    > print Popen(path, stdout=PIPE, shell=True).stdout.read()
    >
    > The output comes as
    > No file found in path - C:/"Program Files"/testfolder/2.3/test.txt
    > but the test.txt file is opened.
    >
    > The issue, I guess, is that the double quotes inside is failing the
    > check. But without the double quotes, Popen fails.
    > One solution, I can think is to check without double quotes, and then
    > using some code, put the double quotes back inside, but it looks quite
    > kludgy.


    You can put the double quotes around the whole path instead of just
    around "Program Files" in the call to Popen().

    The issue here is actually that os.path.exists() (and all other Python
    functions) use the path exactly like you pass it; but with your call to
    Popen(), the path is passed as an argument to the shell, and it needs to
    be quoted for the shell to interpret that correctly.

    So here's what I would do: first specify the path literally without
    quotes, and quote it only when needed:

    path = r'C:/Program Files/testfolder/2.3/test.txt'
    if os.path.lexists(path):
    print 'Path Exists'
    else:
    print 'No file found in path - %s' %path
    print Popen('"%s"' % path, stdout=PIPE, shell=True).stdout.read()

    Some other notes:
    - Since you use forward slashes, there's no need to use a raw string
    literal.
    - You can just as well use os.path.exists() instead of
    os.path.lexists(). The difference has to do with symbolic links, which
    Windows doesn't have.
    - I'm not sure what you expect the line with Popen to do. On my system,
    it opens the specified text file in notepad and returns an empty string.
    If that's what you want to do, it's easier with os.startfile().

    --
    The saddest aspect of life right now is that science gathers knowledge
    faster than society gathers wisdom.
    -- Isaac Asimov

    Roel Schroeven
    Roel Schroeven, Nov 1, 2009
    #3
  4. koranthala

    Aahz Guest

    In article <>,
    koranthala <> wrote:
    >
    >path = r'C:/"Program Files"/testfolder/2.3/test.txt'
    >if os.path.lexists(path):
    > print 'Path Exists'
    >else:
    > print 'No file found in path - %s' %path
    >print Popen(path, stdout=PIPE, shell=True).stdout.read()


    Avoiding shell=True is a Good Idea
    --
    Aahz () <*> http://www.pythoncraft.com/

    [on old computer technologies and programmers] "Fancy tail fins on a
    brand new '59 Cadillac didn't mean throwing out a whole generation of
    mechanics who started with model As." --Andrew Dalke
    Aahz, Nov 4, 2009
    #4
    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. Ilias Lazaridis
    Replies:
    0
    Views:
    569
    Ilias Lazaridis
    Feb 1, 2005
  2. Totan
    Replies:
    0
    Views:
    937
    Totan
    Apr 17, 2006
  3. Replies:
    0
    Views:
    469
  4. Ulf Meinhardt
    Replies:
    8
    Views:
    6,138
  5. Alessandro
    Replies:
    5
    Views:
    565
    Alessandro
    Sep 27, 2010
Loading...

Share This Page