Use a Python Module to Open Explorer on a file

Question:

I’m a python newbie, and I’m having some difficulty making a module out of some very useful code located at: Open explorer on a file.

I can’t figure out what I am doing wrong.

I get the following error messages:

line 31: C:AppsE_drivePython_win32Clipboard.pdf line 34: r’explorer
/select, "C:AppsE_drivePython_win32Clipboard.pdf"’ Traceback (most
recent call last): File
"P:DataVBPython_MarcsPrgsPython_ItWorksOpen_Win_Explorer_and_Select_File.py",
line 42, in
Open_Win_Explorer_and_Select_Fil(filepath) File "P:DataVBPython_MarcsPrgsPython_ItWorksOpen_Win_Explorer_and_Select_File.py",
line 35, in Open_Win_Explorer_and_Select_Fil
subprocess.Popen(Popen_arg) File "C:Python27libsubprocess.py", line 679, in init
errread, errwrite) File "C:Python27libsubprocess.py", line 893, in _execute_child
startupinfo) WindowsError: [Error 2] The system cannot find the file specified

here’s my module:

"""
Open Win Explorer and Select File
# "C:AppsE_drivePython_win32Clipboard.pdf"
"""
import sys
import os, subprocess, pdb

def fn_get_txt_sysarg():
    "Harvest a single (the only) command line argument"
    # pdb.set_trace()
    try:
        arg_from_cmdline = sys.argv[1]
        arg_from_cmdline = str(arg_from_cmdline)
        
    except:
        this_scriptz_FULLName = sys.argv[0]
        
        ErrorMsg = "Message from fn_get_txt_sysarg() in Script (" + this_scriptz_FULLName + '):n' 
        + "tThe Script did not receive a command line argument (arg_from_cmdline)"
        
    returnval = arg_from_cmdline

    return returnval


def Open_Win_Explorer_and_Select_Fil(filepathe):
    # harvested from... https://stackoverflow.com/questions/281888/open-explorer-on-a-file
    #import subprocess 
    #subprocess.Popen(r'explorer /select,"C:pathoffolderfile"') 
    f = str(filepathe)
    print "line 31: " + f
    Popen_arg = "r'explorer /select, " + '"' + f + '"' + "'"
    Popen_arg = str(Popen_arg)
    print "line 34: " + Popen_arg
    subprocess.Popen(Popen_arg)


if __name__ == '__main__': 

    filepath = fn_get_txt_sysarg()
    
    Open_Win_Explorer_and_Select_Fil(filepath)    
Asked By: Marc B. Hankin

||

Answers:

I think the problem is with the initialisation of Popen_arg. Notice from the output that the value of Popen_arg is:

r'explorer /select, "C:AppsE_drivePython_win32Clipboard.pdf"'

This is actually a python raw string literal. You want Popen_arg to have the value which this string literal represents, not this string literal itself. I think if you change it to

Popen_arg = r'explorer /select, "' + f + '"'

it will work better. Note also that the line:

Popen_arg = str(Popen_arg)

has no effect and can be safely removed.

Answered By: srgerg

I copied your code and ran it on my machine and found two errors. The answer srgerg provided addresses one of these errors. The other is that Python triggers an error in fn_get_txt_sysarg() when there is no argument specified on the command line. Below is some sample code, with the errors fixed and some other clean ups:

"""
Open Win Explorer and Select File
"""
import sys
import subprocess

def fn_get_txt_sysarg():
    """Harvest a single (the only expected) command line argument"""
    try:
        return sys.argv[1]    # str() would be redundant here
    except:
        ErrorMsg = 'Message from fn_get_txt_sysarg() in Script (' + sys.argv[0] + '):n' + 'tThe Script did not receive a command line argument'
        sys.exit(ErrorMsg)

def Open_Win_Explorer_and_Select_Fil(filepath):
    # harvested from: https://stackoverflow.com/questions/281888/open-explorer-on-a-file
    Popen_arg = 'explorer /select,"' + filepath + "'"    # str() is redundant here also
    subprocess.Popen(Popen_arg)

if __name__ == '__main__': 
    filepath = fn_get_txt_sysarg()
    Open_Win_Explorer_and_Select_Fil(filepath)
Answered By: GreenMatt
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.