在这种情况下,如何找出文件的基本名称?
>>> from os.path import basename
>>> basename('C:\\test.exe --help')
'test.exe --help'
结果应该test.exe
没有--help
或任何其他参数。
在这种情况下,如何找出文件的基本名称?
>>> from os.path import basename
>>> basename('C:\\test.exe --help')
'test.exe --help'
结果应该test.exe
没有--help
或任何其他参数。
有一个shlex
模块可以模仿Unix shell 的行为(但是由于 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
,并传递给 basename。
如果您想摆脱将反斜杠\
视为转义序列,则应shlex
显式构造对象:
>>> from shlex import shlex
>>> lex = shlex('C:\\test.exe --help')
>>> lex.whitespace_split = True
>>> lex.escape = ''
>>> list(lex)
['C:\\test.exe', '--help']
那么问题是,至少在 Linux 上,'test.exe --exe' 是一个有效的文件名。这就是为什么 python 不尝试从“参数”中清除文件名的原因。我查看了Windows 文档,看起来您还制作了名为“test.exe --exe”的文件。因此,这实际上取决于您要实现的目标。
也看看这个:什么是 UNIX 文件路径最正确的正则表达式?
然后,您应该检查文件是否存在,如果不存在,则使用正则表达式或 shlex 模块来剥离参数...
import os, shlex
print(os.path.basename(shlex.split(r'"C:\\test.exe" --help')[0]))