我在 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。有什么问题?
最佳答案
删除 ssh
周围的引号; shell通常会解析这些并传递参数而不引用:
import subprocess
args = ['rsync', '--rsh=ssh', '/tmp/a/', '127.0.0.1:/tmp/b/']
subprocess.check_call(args)
关于python - 为什么这个 subprocess.check_call() 不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20577375/