从python脚本通过cygwin运行rsync命令

从python脚本通过cygwin运行rsync命令,python,cygwin,rsync,Python,Cygwin,Rsync,我正努力让它工作,但我一直在工作 subprocess.call(['c:/cygwin/bin/bash.exe', '--login', '-i', 'rsync', '-zrgo', '--omit-dir-times', '--verbose', '--delete', '.', 'usertwo@192.168.1.1:/var/www/project/']) -- 您缺少bash的'-c'(命令)选项。此外,还应将rsync命令作为单个字符串提供: subprocess.call(

我正努力让它工作,但我一直在工作

subprocess.call(['c:/cygwin/bin/bash.exe', '--login', '-i', 'rsync', '-zrgo', '--omit-dir-times', '--verbose', '--delete', '.', 'usertwo@192.168.1.1:/var/www/project/'])
--

您缺少bash的'-c'(命令)选项。此外,还应将rsync命令作为单个字符串提供:

subprocess.call(['c:/cygwin/bin/bash.exe', '--login', '-i', '-c', 'rsync -zrgo --omit-dir-times --verbose --delete . usertwo@192.168.1.1:/var/www/project/'])
从手册页:

-c字符串如果存在-c选项,则从中读取命令
一串如果字符串后面有参数,则为
指定给位置参数,从$0开始。
例如:

#bash/bin/ls
/bin/ls:/bin/ls:无法执行二进制文件
#bash-c“/bin/ls-l”

如果在终端中手动输入相同的命令,该命令是否有效?太棒了!非常感谢。不过,如果我提出一个小问题的话。它试图使用当前的cygwin目录,但如果我将完整路径放入该目录,它会告诉我
源和目标不能都是远程的。
您使用的完整路径是什么?它是否有冒号(:)?完整路径是S:/myproject/root/所以我想要S:/myproject/rootusertwo@192.168.1.1:/var/www/project/yeah,rsync将把“:”解释为远程路径(它最初是一个Unix工具,Unix路径中没有“:”。试试看:
cds:/myproject/root/;c:/cygwin/bin/rsync…
作为命令字符串,将“.”作为源目录。它可以工作!这太不可思议了,非常感谢你。我正在使用/cygdrive/s/myrpoject/root
subprocess.call(['c:/cygwin/bin/bash.exe', '--login', '-i', '-c', 'rsync -zrgo --omit-dir-times --verbose --delete . usertwo@192.168.1.1:/var/www/project/'])