我有这样的rsync命令:
rsync --recursive source | grep "\."
我想在子进程中调用它,如下所示:
subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source, '|', 'grep', '"\."'],
stdout=subprocess.PIPE).communicate()[0]
但它不起作用。什么是正确的方法?
答案 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)