Существует shlex
модуль, который имитирует поведение Unix оболочки (но так как command.com используется, чтобы имитировать некоторые из его особенностей, он должен работать тоже). Это будет также терпеть кавычки (но учтите, что я использовал необработанные строки в примере):
>>> import shlex
>>> print shlex.split(r'C:\\test.exe --help')
['C:\\test.exe', '--help']
>>> print shlex.split(r'"C:\\test.exe" --help')
['C:\\test.exe', '--help']
>>> print shlex.split(r'"C:\\Program Files\\test.exe" --help')
['C:\\Program Files\\test.exe', '--help']
Так возьмите первую строку, возвращаемую из shlex.split
и перейти к базовому.
Если вы хотите избавиться от лечащих обратной косой черты \
, как управляющие последовательности вы должны построить shlex
объект явно:
>>> from shlex import shlex
>>> lex = shlex('C:\\test.exe --help')
>>> lex.whitespace_split = True
>>> lex.escape = ''
>>> list(lex)
['C:\\test.exe', '--help']
'повторно. match (r '(. *?) \ s-', basename ('C: \\ test.exe --help')). group (1) ' –
Каков прецедент? Поскольку вы вводите команду с параметрами, вы также можете не вводить параметры так, чтобы базовое имя работало по назначению. В противном случае, пожалуйста, объясните, как ваша программа python получает эту команду с параметрами? Использование basename-regular-expression acrobatics является признаком того, что что-то можно упростить в другом месте. – dopstar
Пользователь указывает команду (заданную строку), и я запускаю ее с помощью 'subprocess.Popen'. Кроме того, я хочу записать имя исполняемого файла ('test.exe') в журнал (что-то вроде' успешно вызванного test.exe'). Решение должно работать с любым возможным вводом, который может обрабатывать 'subprocess.Popen'. – fnkr