猿问

使用字符串vs使用列表的subprocess.call

我正在尝试将rsync与subprocess.call一起使用。奇怪的是,如果我传递subprocess.call一个字符串,它可以工作,但是它不能用于列表(ala,Python的文档)。

用字符串调用sp.call:

In [23]: sp.call("rsync -av content/ writings_raw/", shell=True)sending incremental file list

sent 6236 bytes  received 22 bytes  12516.00 bytes/sec
total size is 324710  speedup is 51.89Out[23]: 0

用列表调用sp.call:

In [24]: sp.call(["rsync", "-av", "content/", "writings_raw/"], shell=True)rsync  version 3.0.9  protocol version 30Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.Web site: http://rsync.samba.org/Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNUGeneral Public Licence for details.rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.Usage: rsync [OPTION]... SRC [SRC]... DEST  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST  or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST  or   rsync [OPTION]... [USER@]HOST:SRC [DEST]
  or   rsync [OPTION]... [USER@]HOST::SRC [DEST]
  or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.Options
 -v, --verbose               increase verbosity -q, --quiet                 suppress non-error messages     --no-motd               suppress daemon-mode MOTD (see manpage caveat)... snipped....
                             repeated: --filter='- .rsync-filter'
     --exclude=PATTERN       exclude files matching PATTERN     --blocking-io           use blocking I/O for the remote shell -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6

动漫人物
浏览 361回答 3
3回答

德玛西亚99

对我来说,使用shell = True并传递列表而不是字符串看起来是完全坏的,除非列表只有一个元素(即没有参数)。

叮当猫咪

推荐的意思是“获得最不令人惊讶的结果”。您可以执行不建议的操作-代码不会阻止您-结果将如我引用的摘录中所述。
随时随地看视频慕课网APP

相关分类

Python
我要回答