0

我有下面的代码,它允许用户拖放文件夹以获取文件夹路径。然后我使用这个文件夹路径并使用它通过 Popen 传递到 Windows 中的命令行应用程序。这一切都很好,除非文件夹路径中有空格,然后失败。我目前正在通过使用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)

然后我将其提交给 Popen,如下所示:

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

1 回答 1

1

您可能只需要在每个文件路径周围加上引号。这通常有效。win32api.GetShortPathName 是一个巧妙的技巧。

这是一种方法:

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

然后做

','.join(folder_list)

您在代码中提到。

于 2014-03-06T16:39:19.687 回答