【问题标题】:issue in file write文件写入问题
【发布时间】:2013-03-14 05:09:08
【问题描述】:

我已经为此苦苦挣扎了几个小时。我想将 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 + ' 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!!

【问题讨论】:

    标签: django file-io python-2.7 django-views


    【解决方案1】:

    你已经完成了params_file.close 而不是params_file.close()

    正确关闭文件会将数据刷新到您要写入的文件中

    处理文件对象时最好使用with 关键字。这样做的好处是文件在套件完成后会正确关闭。

    【讨论】:

    • 呃,谢谢。我真的很惭愧。
    • 感谢提示,我是 python 新手 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2016-08-15
    • 2011-09-15
    相关资源
    最近更新 更多