[英]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.