在完成之前开始观看下载

时间:2013-01-18 22:49:03

标签: python download

  

可能重复:
  How can I run an external command asynchronously from Python?

到目前为止,我的一些代码将下载该文件,然后播放它。 我想要做的是开始下载文件,然后说30秒开始观看下载。

这是代码:

urllib.urlretrieve(url2, "/hdd/movie/movie"))
sleep(30)
self.session.open(MoviePlayer, sref)
从查看我认为这可能有用;

os.spawnl(os.P_NOWAIT, urllib.urlretrieve(url2, "/hdd/movie/movie"))
sleep(30)                
self.session.open(MoviePlayer, sref) 

但是这完全相同并且在播放之前完成下载

1 个答案:

答案 0 :(得分:0)

如果你想在下载完成之前开始观看电影,你需要使用一种方法来部分下载你的fie,并且最重要的是,刷新写入。 urlretrieve使用的代码以缓冲方式写入数据,因此无法立即使用。

以下是执行此操作的一些基本代码:

import sys
import urllib2
import subprocess

url = sys.argv[1]
outname = sys.argv[2]

response = urllib2.urlopen(url)
output = open(outname, 'wb')

chunk_bytesize = 1024 * 1024

data = response.read(chunk_bytesize)
output.write(data)
output.flush()

# Now you can call your movie player.
subprocess.Popen(["open", outname])

# Read the rest of the data.
while True:
    print "Data.."
    data = response.read(chunk_bytesize)
    if not data:
        break
    output.write(data)
    output.flush()

response.close()
output.close()

在这种情况下,指定的程序在读取第一个块后启动。您可以增加块的大小或在读取几个块后启动它。