我在 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/

10-13 07:12