0

我有一个像这样的 rsync 命令:

rsync --recursive source | grep "\."

我想像这样在子进程中调用它:

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

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

4

1 回答 1

0

您需要使用shell=True. 但是,文档不鼓励使用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)
于 2013-06-17T11:36:30.390 回答