我正在尝试使用子进程模块和线程内的Popen启动'rsync'.在我调用rsync之后,我还需要读取输出.我正在使用通信方法来读取输出.我不使用线程时代码运行正常.看来,当我使用一个线程时,它会挂在通信呼叫上.我注意到的另一件事是,当我设置shell = False时,在线程中运行时,我从通信中得不到任何回报.
我正在尝试从python脚本中的子进程执行ssh上的rsync,以将图像从一个服务器复制到另一个服务器.我有一个函数定义为:
def rsyncBookContent(bookIds, serverEnv):
bookPaths = ""
if len(bookIds) > 1:
bookPaths = "{" + ",".join(("book_"+str(x)) for x in bookIds) + "}"
else:
bookPaths = "book_" + str(bookIds[0])
for host in serverEnv['content.hosts']:
args = ["rsync", "-avz", "--include='*/'", "--include='*.jpg'", "--exclude='*'", "-e", "ssh", options.bookDestDir + "/" + bookPaths, "jill@" + host + ":/home/jill/web/public/static/"]
print "executing " + ' '.join(args)
subprocess.call(args)
Run Code Online (Sandbox Code Playgroud)
我最终要做的是让Python执行这个(它来自bash shell):
rsync -avz --include='*/' --include='*.jpg' --exclude='*' -e ssh /shared/books/{book_482,book_347} jill@10.12.27.20:/home/jill/web/public/static/
Run Code Online (Sandbox Code Playgroud)
确实,我的印刷声明输出:
executing rsync -avz --include='*/' --include='*.jpg' --exclude='*' -e ssh /shared/books/{book_482,book_347} jill@10.12.27.20:/home/jill/web/public/static/ …Run Code Online (Sandbox Code Playgroud) 任何人都知道如何在文件被修改时执行方法(python),如Dropbox和他的连续数据保护机制,可以准确地跟踪文件的修改和同步.
当然它不是整个硬盘,而是指定目录上的轨道.
OBS:适用于Windows和Linux操作系统.Mac是一个加号;)