Используйте модуль Python для открытия проводника в файле - PullRequest
2 голосов
/ 22 ноября 2011

Я новичок в Python, и у меня возникают трудности с созданием модуля из очень полезного кода, расположенного по адресу: Открыть проводник для файла .

Я не могу понять, что я делаю неправильно.

Я получаю следующие сообщения об ошибках:

строка 31: C: \ Apps \ E_drive \ Python_win32Clipboard.pdf строка 34: r'explorer / выберите "C: \ Apps \ E_drive \ Python_win32Clipboard.pdf" "Трассировка (большинство последний звонок последний): File "P: \ Data \ VB \ Python_MarcsPrgs \ Python_ItWorks \ Open_Win_Explorer_and_Select_File.py", строка 42, в Файл Open_Win_Explorer_and_Select_Fil (filepath) "P: \ Data \ VB \ Python_MarcsPrgs \ Python_ItWorks \ Open_Win_Explorer_and_Select_File.py", строка 35, в Open_Win_Explorer_and_Select_Fil subprocess.Popen (Popen_arg) Файл "C: \ Python27 \ lib \ subprocess.py", строка 679, в init errread, errwrite) Файл "C: \ Python27 \ lib \ subprocess.py", строка 893, в _execute_child startupinfo) WindowsError: [Ошибка 2] Системе не удается найти указанный файл

вот мой модуль:

"""
Open Win Explorer and Select File
# "C:\Apps\E_drive\Python_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... /165662/otkryt-provodnik-po-failu
    #import subprocess 
    #subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"') 
    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)    

Любая помощь будет высоко ценится.

             Marceepoo

Ответы [ 2 ]

7 голосов
/ 22 ноября 2011

Я думаю, что проблема с инициализацией Popen_arg. Из вывода обратите внимание, что значение Popen_arg равно:

r'explorer /select, "C:\Apps\E_drive\Python_win32Clipboard.pdf"'

Это на самом деле питон необработанный строковый литерал . Вы хотите, чтобы Popen_arg имел значение, которое представляет этот строковый литерал, а не сам этот строковый литерал. Я думаю, если вы измените его на

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

это будет работать лучше. Также обратите внимание, что строка:

Popen_arg = str(Popen_arg)

не имеет никакого эффекта и может быть безопасно удален.

4 голосов
/ 22 ноября 2011

Я скопировал ваш код, запустил его на своей машине и обнаружил две ошибки. ответ srgerg при условии устраняет одну из этих ошибок. Другая причина в том, что Python вызывает ошибку в fn_get_txt_sysarg (), если в командной строке не указан аргумент. Ниже приведен пример кода с исправленными ошибками и некоторыми другими исправлениями:

"""
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: /165662/otkryt-provodnik-po-failu
    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)
...