找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4102|回复: 3

[求助] 关于os.write()的疑问

2

主题

4

帖子

20

积分

贫民

积分
20
Jimmyzhou 发表于 2014-6-20 19:43:19 | 显示全部楼层 |阅读模式
好奇,搜索了以下Python写进度条的方法。搜到下面这个代码:
import os,sys,string     
import time     
def view_bar(num=1, sum=100, bar_word=":"):     
    rate = float(num) / float(sum)     
    rate_num = int(rate * 100)     
    print '\r%d%% :' %(rate_num),     
    for i in range(0, num):     
        os.write(1, bar_word)     
    sys.stdout.flush()     
if __name__ == '__main__':     
    for i in range(0, 100):     
        time.sleep(0.1)     
        view_bar(i, 100)

觉得很奇怪。os.write(1,bar_word)这行明显不行啊,而且确实运行起来有问题。
Traceback (most recent call last):
  File "C:\Python27\code\tryxml.py", line 14, in <module>
    view_bar(i, 100)
  File "C:\Python27\code\tryxml.py", line 9, in view_bar
    os.write(1, bar_word)
OSError: [Errno 9] Bad file descriptor

求教,是我理解的问题还是本身就不是正解。那么如何用Python来实现进度条呢?比如我用一个工具进行解压文件(比如7zip),当然是用cmdline来执行。想另外写一个函数来表现其执行过程的进度条。如何做呢?




回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2014-6-20 21:12:34 | 显示全部楼层
是不是版本的问题?
回复 支持 反对

使用道具 举报

2

主题

4

帖子

20

积分

贫民

积分
20
Jimmyzhou  楼主| 发表于 2014-6-21 09:07:12 | 显示全部楼层
blueelwang 发表于 2014-6-20 21:12
是不是版本的问题?

版本問題,其實這個我就說不準了。我用的是Python 2.7。 但是按照我從幫助文檔里找出來的關於os.write()的說明來看 ==》 os.write(fd,'XXXXX')。
必須先用fd = file(xxx)或者fd = open(xxxx)產生一個文件的descriptor。然後才能執行os.write(fd,xxxxx)。這個所以實例代碼里的os.write(1,xxxx)里的這個1.。。我不是太理解。

回复 支持 反对

使用道具 举报

2

主题

4

帖子

20

积分

贫民

积分
20
Jimmyzhou  楼主| 发表于 2014-6-21 09:11:35 | 显示全部楼层
後來自己修改。寫成這樣。用cmd運行是有點小意思。但是只是一個進度條而已。實在沒能力去寫一個監控程序過程并返回進度條的東西。求大神指導~!!!
import os,sys,string     
import time

def view_bar(num=1, sum=100):     
    rate = float(num) / float(sum)     
    rate_num = int(rate * 100)
   
    print '{0}{1:<50}{2}'.format('[','#'*(num/2),']')
   
    print '\r%d%%' %(rate_num), 'percent done'
  
    sys.stdout.flush()     
if __name__ == '__main__':     
    for i in range(0, 100):     
        time.sleep(0.1)
        os.system('cls')
        view_bar(i, 100)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表