如何从列表/字符串向subprocess.run传递rsync子进程参数?
解决rsync子进程参数传递问题
要批量传递参数给rsync子进程,核心是让每个命令行参数成为subprocess.run()列表中的独立元素,以下是正确的实现方式:
方法1:列表拼接(推荐,适用于参数已为列表的情况)
直接将rsync命令、参数列表、目录参数拼接成一个完整的参数列表:
args = ['--progress', '-avh'] subprocess.run(['rsync'] + args + [loaded_prefs['src_dir'], loaded_prefs['dst_dir']])
方法2:字符串安全拆分(适用于参数为空格分隔字符串的情况)
如果参数是单个空格分隔的字符串,用shlex.split()安全拆分后再拼接(能处理带空格的参数):
import shlex args_str = '--progress -avh' subprocess.run(['rsync'] + shlex.split(args_str) + [loaded_prefs['src_dir'], loaded_prefs['dst_dir']])
为什么之前的写法失效?
- 将多个参数合并为单个字符串(如
args = '--progress -avh'):subprocess.run()会把整个字符串当作rsync的单个参数,rsync无法识别--progress -avh这个无效选项。 - 用
,连接列表元素(如','.join(args)):生成的--progress,-avh仍是单个参数,rsync同样无法解析为两个独立选项。
内容的提问来源于stack exchange,提问作者Chris Barrett
相关产品推荐
相关产品推荐

