加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在Python中显示和解析rsync进度?

发布时间:2020-12-20 13:31:44 所属栏目:Python 来源:网络整理
导读:我正在使用rsync的开发版本和–info-progress选项.我正在编写一个 python程序,它使用rsync将文件从服务器传输到本地计算机: finalresult = subprocess.Popen(['sshpass','-p',password,'rsync','-avz','--info=progress2','hostname:/filename','/home/nfs/
我正在使用rsync的开发版本和–info-progress选项.我正在编写一个 python程序,它使用rsync将文件从服务器传输到本地计算机:

finalresult = subprocess.Popen(['sshpass','-p',password,'rsync','-avz','--info=progress2','hostname:/filename','/home/nfs/django/user'],stdout=subprocess.PIPE).communicate()[0]

当我在终端中运行程序时,它不会向我显示进度,但是如果我独立使用rsync实用程序它会显示进度.我希望在终端中查看进度并解析或获取进度百分比以便稍后使用它来实时向用户显示进度条.谢谢!

编辑:
这是我到目前为止所尝试的:
上面的代码将命令处理存储在finalresult变量中.我试图在django模板中打印finalresult变量,但它不会返回任何内容.

解决方法

抱歉,这可能既不能用子进程也不能用标准库的其余部分完成.那是因为在subprocessprocessmunicate()中你会发现:

def wait(self):
   """Wait for child process to terminate.  Returns returncode
   attribute."""
   if self.returncode is None:
      # Try calling a function os.waitpid(self.pid,0)
      # Ignore Interrupted System Call (errno.EINTR) errors  
      pid,sts = _eintr_retry_call(os.waitpid,self.pid,0)
      self._handle_exitstatus(sts)
   return self.returncode

在Unix上,os.waitpid()函数调用意味着:等待进程id pid给出的子进程的完成,并返回包含其进程ID和退出状态指示的元组.因此,您必须等到子进程完成.

最接近的替代方案是pexpect,但它仍然不会进行进度条分析.一个可能的解决方案是破解rsync并修补其进度输出,以便pexpect可以使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读