Wxpython перетаскивание пути к папке, Popen не работает с пробелами в Windows

У меня есть код ниже, который позволяет пользователю перетащить папку, чтобы получить путь к папке. Затем я беру этот путь к папке и использую его для перехода к приложению командной строки в Windows с помощью Popen. Это все работает нормально, за исключением случаев, когда в пути к папке есть пробелы, которые затем не удается В настоящее время я обхожу это с помощью win32api.GetShortPathName(folder_list) что сокращает их до спецификации DOS 8.3, но я хотел бы использовать полный абсолютный путь. Я знаю, что приложение командной строки принимает пути с пробелами, так как я также использую командный файл с перетаскиванием, который работает с пробелами в путях. Я попытался вставить экранирование и т. Д., Но все же не повезло. Как я могу заставить это работать должным образом с полными путями к папкам с пробелами?

class SubmissionPane(wx.Panel):
    def __init__(self, parent, queue_control):
        wx.Panel.__init__(self, parent, -1)

        self.parent = parent
        self.queue_control = queue_control
        self.selected_folder = None

        self.txtTitle = wx.TextCtrl(self, pos=(125, 70), size=(215, 25), style= wx.SUNKEN_BORDER, value="Enter Series Title Here")
        self.txtTitle.Show(False)

        self.drop_target = MyFileDropTarget(self)
        self.SetDropTarget(self.drop_target)

    def SetSubmissionFolders(self, folder_list):
        """Called by the FileDropTarget when files are dropped"""
        print "Setting submission folders", folder_list
        self.tc_files.SetValue(','.join(folder_list))  
        self.selected_folders = folder_list

class MyFileDropTarget(wx.FileDropTarget):
    """"""
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        print "Creating a drop file target..."
        self.window = window

    def OnDropFiles(self, x, y, filenames):
        self.window.SetSubmissionFolders(filenames)

Затем я отправляю это Попену так:

command1 = commandLineApplication + folder_list
process = Popen(command1, shell=True, stdin=PIPE)

1 ответ

Решение

Возможно, вам просто нужно заключить в кавычки каждый путь к файлу. Это обычно работает. Win32api.GetShortPathName - это хороший трюк.

Вот один из способов сделать это:

n = ['"%s"' % x for x in folderlist]

Затем сделайте

','.join(folder_list)

Вы упомянули в своем коде.

Другие вопросы по тегам