subprocess chokes on spaces in path

BartlebyScrivener bscrivener42 at gmail.com
Tue Nov 6 15:32:33 EST 2007


Using bash on Debian Etch.

If word_doc = sys.argv[1] and it's a file name like My\ Word.doc this
function reads My and Word as two separate files unless the second
'%s' is quoted.  Took me a lot of trial and error to discover. Is this
the most elegant way to do it? I was using popen originally, then saw
some threads suggesting subprocess cured the spaces in path problem.

def get_MSWordDoc_text(word_doc):
    """Harvests text from an MSWord doc using antiword."""
    antiword = "/usr/bin/antiword"

    # Note the extra single quotes around the second '%s'
    # without these quotes, bash chokes on paths with spaces in them
    # says can't open My ; can't open Word
    # using new subprocess module, the extra '%s' shouldn't be
necessary?
    # but I could not get to work
    # see Beazley 2nd Ed. page 340

    p = subprocess.Popen("%s '%s'" % (antiword, word_doc), shell=True,
stdout=subprocess.PIPE)
    doc_text = p.stdout.read()
    return doc_text

thx,

rd




More information about the Python-list mailing list