gpt4 book ai didi

Python:拆分和格式化字符串中的空格分隔值以在 subprocess.check_call 中使用

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:17 25 4
gpt4 key购买 nike

我将 subprocess.check_call 与 rsync 结合使用。

我需要为 rsync 使用来自包含多个空格分隔值的字符串的参数,但是因为字符串是单个对象,它在 subprocess.check_call 中失败(它期望每个参数都是一个单独的字符串)。

这就是我要说的:

import subprocess
rsync_options = '-axh --delete --delete-excluded'
subprocess.check_call(['rsync', rsync_options, '/tmp/1', '/tmp/2'])

这将返回以下预期:

subprocess.CalledProcessError: Command '['rsync', '-axh --delete --delete-excluded', '/tmp/1', '/tmp/2']' returned non-zero exit status 1

这个有效:

subprocess.check_call(['rsync', '-axh', '--delete', '--delete-excluded', '/tmp/1', '/tmp/2'])

如何在不知道可能提供多少参数的情况下从 rsync_options 生成单独的字符串并将它们格式化以在 subprocess.check_call 中使用?

最佳答案

如果我理解正确你的问题,你可以使用shlex.split . (正如 JAB 指出的那样,rsync_options.split() 也是这种特殊情况下的一个选项,但它在某些极端情况下会失败,as illustrated by the note here。)

>>> import shlex
>>> shlex.split('-axh --delete --delete-excluded')
['-axh', '--delete', '--delete-excluded']

然后您可以按您喜欢的任何方式插入附加扩展结果。


也许构造最终列表的最简单方法是连接:

>>> rsync_options = '-axh --delete --delete-excluded'
>>> rsync_args = ['rsync'] + shlex.split(rsync_options) + ['/tmp/1', '/tmp/2']
>>> rsync_args
['rsync', '-axh', '--delete', '--delete-excluded', '/tmp/1', '/tmp/2']

但这会产生一个副本。在这种情况下,这可能无关紧要,但为了完整起见,这里有一种无需复制的方法:

>>> rsync_args = shlex.split(rsync_options)
>>> rsync_args.extend(['/tmp/1', '/tmp/2'])
>>> rsync_args.insert(0, 'rsync')
>>> rsync_args
['rsync', '-axh', '--delete', '--delete-excluded', '/tmp/1', '/tmp/2']

关于Python:拆分和格式化字符串中的空格分隔值以在 subprocess.check_call 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6816735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com