Python 避免在plumbum中转义glob表达式
假设我想使用运行类似于Python 避免在plumbum中转义glob表达式,python,shell,plumbum,Python,Shell,Plumbum,假设我想使用运行类似于ls a*的东西 我知道铅会自动逃避争论,这通常是件好事。但是有没有办法让它明白glob表达式应该按原样传递给shell?您可以使用Python的内置语言进行自己的glob扩展。例如: from plumbum.cmd import ls from glob import glob ls[glob('a*')] 但是有没有办法让它理解glob表达式应该按原样传递给shell plumbum按原样将a*传递给ls命令ls命令不运行任何shell,因此没有全局扩展(由*ni
ls a*
的东西
我知道铅会自动逃避争论,这通常是件好事。但是有没有办法让它明白glob表达式应该按原样传递给shell?您可以使用Python的内置语言进行自己的glob扩展。例如:
from plumbum.cmd import ls
from glob import glob
ls[glob('a*')]
但是有没有办法让它理解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
版本中可能有一个bug,需要将args
列表显式转换为元组)
如果你愿意;你可以称之为shell:
from plumbum.cmd import sh
sh('-c', 'ls -l a*')
注意:Python的
glob.glob()
函数可能会产生与shell不同的glob扩展。对于ls的特殊情况,还有另一种方法:
from plumbum import local
p = local.path('path/to/dir')
local.cwd.glob(str(p) + 'a*')
--或--
由于
ls[glob('a*')()(
失败,但ls[tuple(glob('a*')))])()(
工作,因此在plumbum 1.1.0中可能存在错误。
。它固定在plumbum 1.4.1上,也就是说,ls[glob('a*')]()
works(注意:末尾的括号用于运行命令)。@PeterGibson:这取决于具体情况。这个评论似乎与答案无关。也许,您想问一个单独的堆栈溢出问题。@J.F.Sebastian:对不起,我没有说得那么好。我想知道在使用plumbum.SshMachine
时如何处理glob扩展。我最后使用了类似于remote['sh']('-c','ls a*')
@PeterGibson检查与答案中相同的方法是否有效:remote['ls'](*remote.cwd/'a*')
@J.F.Sebastian是的。实际上,就我而言,remote.cwd//'a*'
本身就足够了。
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*')