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)
Вы упомянули в своем коде.