我在Ubuntu 12上使用Python 2.7运行这些代码片段。
import subprocess
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/']
subprocess.check_call(args)
失败
import subprocess
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/']
call_string = ' '.join(args)
subprocess.check_call(call_string)
作品
第一个代码段会导致rsync获取无效的命令行。使用此选项的简短版本(-e
)没有任何区别。如果我删除--rsh
部分,它可以正常工作。
使用shell=True
没有任何区别。从“ssh”中删除引号没有任何区别,我想保留引号,以便我可以将参数传递给ssh。
有什么问题?
答案 0 :(得分:2)
删除ssh
周围的引号; shell通常会解析那些并传递参数而不用引用:
import subprocess
args = ['rsync', '--rsh=ssh', '/tmp/a/', '127.0.0.1:/tmp/b/']
subprocess.check_call(args)