0
我一直在爲此奮鬥了幾個小時。我想發送一個由Django生成的文本文件到另一臺服務器。爲此,我使用scp和subprocess.call()
。一切順利,我得到了return_code == 0
,但scp發送0字節。在服務器端創建的文件是空的。問題在文件中寫入
我打印執行的確切命令,路徑是正確的,如果我把它放在一個shell中,它完美的工作。
下面是代碼:
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 + ' [email protected]:'
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!!
Duh.Thanks。我真的很慚愧。 – 2013-03-14 05:18:33
感謝您的提示,我是新來的蟒蛇:) – 2013-03-14 05:25:00