在這種情況下,如何找出文件的基本名稱?Python os.path.basename,strip參數
>>> from os.path import basename
>>> basename('C:\\test.exe --help')
'test.exe --help'
結果應該只是test.exe
沒有--help
或任何其他參數。
在這種情況下,如何找出文件的基本名稱?Python os.path.basename,strip參數
>>> from os.path import basename
>>> basename('C:\\test.exe --help')
'test.exe --help'
結果應該只是test.exe
沒有--help
或任何其他參數。
有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']
import os, shlex
print(os.path.basename(shlex.split(r'"C:\\test.exe" --help')[0]))
這將返回當前文件的基本名稱,但不是'C:\\ test.exe --help'。 – fnkr
現在請驗證並將其標爲正面。 – csharpcoder
那麼問題是,至少在Linux上,「test.exe的--exe '是一個有效的文件名。所以這就是爲什麼python不會嘗試從'參數'中清除文件名的原因。我看着windows docs,它看起來像你也使文件名爲'test.exe --exe'。所以,這取決於你想要達到的目標。
也看看這個:What is the most correct regular expression for a UNIX file path?
那麼你或許應該檢查文件是否存在,如果它不然後使用正則表達式或shlex模塊剝去參數...
這不完全正確。 'test.exe --exe'在Windows上也是一個有效的文件名。在Linux和Windows上運行'test.exe --exe'將會打開'test.exe'而不是'test.exe --exe',除非你引用或轉義它。在這一點上,Windows和Linux沒有區別。我發現的唯一區別是'test.exe/test'('test.exe'和'/ test'之間沒有空格)會在Windows上調用'test.exe'作爲參數,而不是在Linux上調用'test.exe',但是我認爲這種情況在我的情況下很難忽略。 – fnkr
test.exe \ --exe會在bash中被認爲是文件名,test.exe --exe不會。 –
就像我說的,escape('test.exe \ --exe')或者引號('「test.exe --exe」')。 – fnkr
'重。 match(r'(。*?)\ s-',basename('C:\\ test.exe --help'))。group(1)' –
這是什麼用法?既然你用參數輸入你的命令,你也可以不輸入參數,以便基本名稱按預期工作。否則,請解釋你的python程序如何得到這個命令的參數?使用basename-regular-expression雜技是一種跡象,可以使其他地方變得更簡單。 – dopstar
用戶指定一個命令(給定的字符串),我用'subprocess.Popen'運行它。另外,我想將執行文件的名稱('test.exe')記錄到日誌中(類似「成功稱爲test.exe」)。該解決方案應該可以處理'subprocess.Popen'可以處理的任何可能的輸入。 – fnkr