2017-08-10 29 views
1

私のdjangoビューでは、サブプロセスによって起動されたスクリプトがバックグラウンドでいくつかのコマンドを実行しているので電子メール通知を送信する必要があります。どのように私はこれを行うことができるかについてのアイデア?サブプロセスが処理を終了したら実行コード

マイビュー:

def getor(request): 
# process 
    subprocess.call("./step1.sh", shell=True) 
#send notification 
    current_site = get_current_site(request) 
    user = User.objects.values('username').order_by('id').last() 
    us = user['username'] 
    subject = 'Notification of endprocess.' 
    message = render_to_string('notify.html', { 
     'us':us, 
     'domain':current_site.domain, 
    }) 
    eml = User.objects.values('email').order_by('id').last() 
    toemail = eml['email'] 
    email = EmailMessage(subject, message, to=[toemail]) 
    email.send() 
    return render(request, 'endexecut.html') 
+0

https://stackoverflow.com/questions/14043030/checking-status-of-process-with-subprocess-popen-in-python help? – Stael

+0

私はcomunicate()関数でいくつかのエラーを抱えていましたが、答えのコメントにありましたが、とにかくありがとうございます。 –

答えて

1

クイックフィックスは、電子メールが機能して送信し、Pythonのファイルを作成して置くことができます。 step1.sh

私が理解できないことは、subprocess.callはブロック機能です。すなわち、コール機能のコマンドが完了しなくなるまで、次のコード行には進まない。

私はgeventと一緒に行きます。すべての機能を置くと、ジエントが発生します。この関数の中でまずサブプロセスを呼び出し、PIDを格納します。次のコードはwhileループで、PIDが存在するかどうかを確認する必要があります。そうでない場合は、メールを送信してループを解除します。または、特定の秒間スリープ状態になります。

+0

ありがとう、私は電子メールのコードをpythonスクリプトに入れてdjangoの設定をインポートしました。私は電子メール設定を使用し、このpythonスクリプトをサブプロセスのbashスクリプトから呼び出しました。スクリプト内のコマンドはバックグラウンドで実行されるため、subprocess.call()はこのケースではブロックされません。 –

+0

よろしくお願いします。私の答えが助けられたら、両方のカルマの目印にしてください。 – Swagat

関連する問題