2

可能重复:
如何从 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) 

但这完全一样,并在播放前完成下载

4

1 回答 1

0

如果您想在下载完成之前开始观看电影,您需要使用一种方法来部分下载您的文件,并且最重要的是,刷新写入。使用的代码以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()

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

于 2013-01-19T02:03:59.513 回答