Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 避免在plumbum中转义glob表达式_Python_Shell_Plumbum - Fatal编程技术网

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*')