我需要在Windows 7 x64(使用cwRsync 5.5.0)从Python 2.7应用程序运行rsync。
从命令行一切工作正常:在env中将CWRSYNCHOME设置为cwrsync二进制文件并运行以下命令
rsync.exe "/cygdrive/e/test" test1@192.168.1.14:
但是当试图运行与pythonsubprocess相同的命令时:
process = subprocess.Popen(['rsync.exe', '/cygdrive/e/test', 'test1@192.168.1.14:'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, env={'CWRSYNCHOME': './bin'}) stdout, stderr = process.communicate() print 'STDOUT:{}\nSTDERR:{}'.format(stdout, stderr)
在stderr中出现以下错误:
rsync: pipe: Operation not permitted (1) rsync error: error in IPC code (code 14) at pipe.c(59) [sender=3.1.2]
这里是详细的rsync标准输出:
FILE_STRUCT_LEN=16, EXTRA_LEN=4 cmd=<NULL> machine=192.168.1.14 user=test1 path=. cmd[0]=ssh cmd[1]=-l cmd[2]=test1 cmd[3]=192.168.1.14 cmd[4]=rsync cmd[5]=--server cmd[6]=-vvvvve.LsfxC cmd[7]=. cmd[8]=. opening connection using: ssh -l test1 192.168.1.14 rsync --server -vvvvve.LsfxC . . (9 args) [sender] _exit_cleanup(code=14, file=pipe.c, line=59): entered [sender] _exit_cleanup(code=14, file=pipe.c, line=59): about to call exit(14)
Tryed set shell = False并将命令传递为单行(不是cmd和args) – 错误stil重复。
我究竟做错了什么 ?
为了得到它的工作,rsync需要在cygwin的shell下运行:
process = subprocess.Popen(['sh.exe', '-c', 'rsync /cygdrive/e/test test1@192.168.1.14:'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, env={'CWRSYNCHOME': '/bin/', 'PATH': '/bin/'})
它正在工作(在上面的例子中没有ssh athorization)。