`subprocess.call` operates differently to running command directly in shell
Question: I have the following command in Python, which I wrote with the aim of copying
only `.yaml` files from a `source` directory (on the network) to a local
`target` directory:

    
    
    import subprocess as sp
    
    cmd = ['rsync', '-rvt',  "--include='*/*.yaml'",  "--exclude='*/*'",
         source , destination]
    
    print ' '.join(cmd)
    sp.call(cmd)
    

However, when I run this Python, _all_ files are copied, including `.jpg` etc.

* * *

When I run the shell command directly:

    
    
    rsync -rvt --include='*/*.yaml' --exclude='*/*' <source> <target>
    

...then only `.yaml` files are copied, as expected.

* * *

What is going on here? Why does the command operate differently in shell than
under `subprocess.call`?

(This is with a Bash shell on Ubuntu 14.04, using Anaconda's Python 2)


Answer: You should remove the single quotes around the wildcards:

    
    
    ['rsync', '-rvt',  "--include=*/*.yaml",  "--exclude=*/*",     source , destination]
    

Those quotes are processed by the shell, the shell doesn't pass in the quotes
to rsync.

