如何用Python编写轮询函数?
我正在尝试编写一个函数,该函数每1分钟读取一次变量并返回每次的值。变量名为proc:如何用Python编写轮询函数?,python,polling,Python,Polling,我正在尝试编写一个函数,该函数每1分钟读取一次变量并返回每次的值。变量名为proc: proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination], stderr=subprocess.PIPE, stdout=subprocess.PIPE).communica
proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]
进度存储在proc变量中。我希望函数每1分钟轮询一次变量并返回值。这将一直执行,直到变量执行完毕。最好的方法是什么
尝试使用:
def doWork():
while True:
proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]stdout=subprocess.PIPE).communicate()[0]
data = sort(proc)
print data
time.sleep(10)
不过运气不好!它同时打印整个进度并循环 下面的代码将运行rsync并在命令可用时读取该命令的任何输出。我使用rsync的--progress选项将其打印出来。进度更新有时以
\n
结尾,有时以\r
结尾。因此,我阅读单个字符,然后通过查找这两个字符中的任何一个来形成每行字符。每当我遇到一条新的进度线,我就把它打印到屏幕上。您可以选择执行任何操作,例如解析完成百分比和显示图形进度条。如果您有兴趣了解如何在终端中生成进度条。我给出了sync函数的示例调用和示例输出
代码
from subprocess import Popen, PIPE
def sync(src, dest, passwd):
cmd = ['sshpass', '-p', passwd, 'rsync', '-avz', '--progress', src, dest]
p = Popen(cmd, stdout=PIPE)
line = ''
while True:
c = p.stdout.read(1)
if not c:
break
if c in ['\n', '\r']:
print 'rsync progress: %s' % line
line = ''
else:
line += c
sync('/path/big.txt', 'myserver:/path/', 'mypassword')
输出
rsync progress: sending incremental file list
rsync progress: big.txt
rsync progress:
rsync progress: 32768 0% 0.00kB/s 0:00:00
rsync progress: 65798144 31% 62.72MB/s 0:00:02
rsync progress: 131596288 62% 62.77MB/s 0:00:01
rsync progress: 197427200 94% 62.79MB/s 0:00:00
rsync progress: 209715200 100% 62.80MB/s 0:00:03 (xfer#1, to-check=0/1)
rsync progress:
rsync progress: sent 204032 bytes received 31 bytes 45347.33 bytes/sec
rsync progress: total size is 209715200 speedup is 1027.70
你可以检查一下,非常感谢你的回答。如何在Django中显示相同的内容(在web浏览器中?@user1881957请看。看看我的答案和其他答案。这很有帮助,但对我的问题不太具体。请编辑您的答案。@user1881957我建议您发布一个新问题,并提供您想要的详细信息。也就是django,你想要一个progressbar吗?或者只是文本输出。上面的答案解决了你提出的问题。也要尝试一下,修改代码,告诉我们你在哪里被卡住了。通常在堆栈溢出中,没有为您编写代码的文化,更多的是试图帮助您解决您面临的编码问题。我将发布一个新问题。是的,我想要进度条。