2

我正在使用Plumbum在 Python 的前台运行命令行实用程序。如果你有一个命令foo x y z,你会像这样从 Plumbum 运行它:

from plumbum import cmd, FG
cmd.foo['x', 'y', 'z'] & FG

然而,在我正在编写的代码中,参数['x', 'y', 'z']被生成到一个列表中。我不知道如何解压此列表以将其作为参数发送给铅。有什么建议么?

4

4 回答 4

5

原来我可以用__getitem__这个。我所要做的就是:

from plumbum import cmd, FG
params = ['x', 'y', 'z']
cmd.foo.__getitem__(params) & FG
于 2017-08-14T16:50:45.173 回答
0

感谢 Alon Mysore 的回答,恰好是我需要的。

我尝试了以下方法(没有用):

from plumbum import local
from plumbum.commands import ProcessExecutionErr

files = ['gs://some-repo/somefile.txt', 'gs://some-repo/somefile2.txt']
files_string = ' '.join(files)

gsutil = local['gsutil']
command = gsutil['-m', 'rm', files_string]
try:
    job = command.run()
except ProcessExecutionError as err:
    print('Error: {}'.format(err))
    sys.exit(1)

但是在您回答之后,这是另一个使用 gsutil (DID Work) 供人们参考的示例:

from plumbum import local
from plumbum.commands import ProcessExecutionError

files = ['gs://some-repo/somefile.txt', 'gs://some-repo/somefile2.txt']

gsutil = local['gsutil']
command = gsutil['-m', 'rm']
try:
    job = command.__getitem__(files).run()
except ProcessExecutionError as err:
    print('Error: {}'.format(err))
    sys.exit(1)

问题是当我自己将列表连接成一个字符串时,铅似乎并没有很好地发挥作用。

于 2017-10-12T13:14:48.880 回答
0

这似乎有效:

from plumbum import cmd, FG
params = ['x', 'y', 'z']
cmd.foo(*params) & FG
于 2019-02-25T12:07:28.777 回答
0

而不是 use __getitem__,一个更具可读性(和等效)的解决方案是bound_command

from plumbum import cmd, FG
params = ['x', 'y', 'z']
cmd.foo.bound_command(params) & FG
于 2020-06-18T04:13:02.167 回答