1

Django で start_date と end_date (処理終了後) を取得しようとしています。私はシンプルなフォームを持っています。ユーザーがクリックするSubmitと、start_date を取得し、その値をデータベースに挿入します。処理が完了したら、end_date を取得し、その値をデータベースに挿入します。私はすでにDjangoでデータベースをセットアップしています。処理は次のように行われます。

command = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source],
                           stdout=subprocess.PIPE)

コマンドの実行がいつ終了するかを知り、end_date を記録するにはどうすればよいですか?

4

2 に答える 2

0

エレガントな方法でやりたい場合は、celeryのような非同期タスク システムを使用してみて、César García が提示したようなタスク内で bash プロセスを実行する必要があります。

別のオプションは、次のようなものを実行することです。

subprocess.Popen(['sshpass ... && curl -X GET IP:PORT/some/internal/view/%d/' % task_id], shell=True)

終了時刻は、django ビュー内のデータベースに挿入される場合があります。

于 2013-01-03T13:04:56.540 に答える
0

を探していPopen.poll()ます。Popen がまだ実行されている間は None を返します。例:

import subprocess
from datetime import datetime

d1 = datetime.now()
c = subprocess.Popen (["find", "/home/whatever", "-name","eclipse.ini"])

while c.poll() is None:
    pass

deltatime = datetime.now() - d1
print deltatime.total_seconds()

whileループに注意してください。Popen プロセスが終了するまで、プログラムはスタックします。それを避けるためにスレッドを立ち上げたいと思うかもしれません。

于 2013-01-03T12:04:46.423 に答える