私はこれに数時間苦労しています。Django によって生成されたテキスト ファイルを別のサーバーに送信したいと考えています。そのために、scp とsubprocess.call()
. すべてがうまくいき、 を受け取りましたreturn_code == 0
が、scp は 0 バイトを送信します。サーバー側で作成されたファイルは空です。
実行された正確なコマンドを出力しました。パスは正しく、シェルに入れると完全に機能します。
コードは次のとおりです。
form = SubmitForm(request.POST or None)
context['form'] = form
if request.method == 'POST':
if form.is_valid():
# write file in ~/hipercic/apps/dcor/jobs/
params_file = open('apps/dcor/jobs/job_' + datetime.today().strftime("%Y%m%d_%H%M%S") + '_params.txt', 'wb')
for key, val in form.cleaned_data.iteritems():
params_file.write(str(val) + ' \n')
params_file.close
cmd = 'scp /home/guillet/hipercic/' + params_file.name + ' guillet@helios.public.stolaf.edu:'
context['cmd'] = cmd
return_code = subprocess.call(cmd, shell=True)
context['return_code'] = return_code
return render(request, 'base_pending.html', context)
ファイルが送信される前に完全に書き込まれる時間がないという競合状態の可能性について考えましたが、time.sleep(3) では何も変わりません。
また、何か非常に奇妙で問題の核心です。ファイルを閉じた直後に再度開いて読み取ろうとすると、ファイルは空です。
with open('/home/guillet/hipercic/' + params_file.name, 'rb') as f:
print f.read() # prints nothing!!