如何在子进程调用中使用以下rsync命令?

时间:2013-06-17 11:20:46

标签: python subprocess

我有这样的rsync命令:

rsync --recursive source | grep "\."

我想在子进程中调用它,如下所示:

subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source, '|', 'grep', '"\."'],
                               stdout=subprocess.PIPE).communicate()[0]

但它不起作用。什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

您需要使用shell=True调用shell。但是,documentation不鼓励使用shell=True

为了避免使用shell=True,您可以先创建rsync进程并将其输出传递给grep

rsync_out = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source], stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', '\.'), stdin=rsync_out.stdout)