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 に答える