为什么这个subprocess.check_call()不起作用?

时间:2013-12-13 22:53:33

标签: python linux subprocess

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

有什么问题?

1 个答案:

答案 0 :(得分:2)

删除ssh周围的引号; shell通常会解析那些并传递参数而不用引用:

import subprocess
args = ['rsync', '--rsh=ssh', '/tmp/a/', '127.0.0.1:/tmp/b/']
subprocess.check_call(args)