可能重复:
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)
但是这完全相同并且在播放之前完成下载
答案 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()
在这种情况下,指定的程序在读取第一个块后启动。您可以增加块的大小或在读取几个块后启动它。