Если вам нужно передать имя существующего файла, у вас может быть больше шансов на успех, передав версию 8.3 имени файла Unicode.
Вам нужно установить пакет pywin32 , тогда вы можете сделать:
>>> import win32api
>>> win32api.GetShortPathName(u"C:\\Program Files")
'C:\\PROGRA~1'
Я считаю, что в этих коротких именах файлов используются только символы ASCII, и поэтому вы должны иметь возможность использовать их в качестве аргументов командной строки.
Если вам необходимо указать также имена файлов, которые будут созданы, вы можете создать их с нулевым размером заранее из Python, используя имена файлов Unicode, и передать короткое имя файла в качестве аргумента.
ОБНОВЛЕНИЕ: пользователь bogdan правильно говорит, что 8.3 генерация имени файла может быть отключена (у меня это тоже было отключено, когда у меня на ноутбуке была Windows XP), поэтому вы не можете на них положиться Таким образом, в качестве другого более надуманного подхода при работе с томами NTFS можно жестко связать имена файлов Unicode с простыми ASCII-файлами; передать имена файлов ASCII внешней команде и затем удалить их.