簡體   English   中英

避免在plumbum中轉義glob表達式

[英]Avoid escaping glob expressions in plumbum

假設我想使用plumbum運行類似ls a*東西。

from plumbum.cmd import ls
ls['a*']()
...
ProcessExecutionError: Command line: ['/bin/ls', 'a*']
Exit code: 1
Stderr:  | ls: a*: No such file or directory

我知道plumbum會自動逃避參數,這通常是一件好事。 但有沒有辦法讓它理解glob表達式應該按原樣傳遞給shell?

但有沒有辦法讓它理解glob表達式應該按原樣傳遞給shell?

plumbum按原樣傳遞a*ls命令。 ls命令不運行任何shell,因此沒有全局擴展(由* nix上的shell完成)。

您可以使用glob模塊進行擴展:

from glob import glob

ls('-l', *glob('a*'))

另一種方法是使用Workdir對象:

from plumbum import local

ls('-l', *local.cwd // 'a*')

推遲通話; 你可以使用ls['-l'][args]語法(注意: plumbum 1.1.0版本中可能存在一個錯誤,需要將args列表顯式轉換為元組)。

如果你想; 你可以調用shell:

from plumbum.cmd import sh

sh('-c', 'ls -l a*')

注意:Python的glob.glob()函數可能會產生與shell不同的glob擴展。

你可以使用Python的內置glob模塊進行自己的glob擴展。 對於你的例子:

from plumbum.cmd import ls
from glob import glob

ls[glob('a*')]

對於ls的特殊情況,還有另一種方法:

from plumbum import local

p = local.path('path/to/dir')
local.cwd.glob(str(p) + 'a*')

- 要么 -

from plumbum import local

p = local.path('path/to/dir')
local.cwd.chdir(p)
local.cwd.glob('a*')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM