Problem:当将通过 render_to_string 读入的字符串写入文件时,我的 Django 应用程序在每个 CRLF 之前引入一个 CR。在我的模板文件中,我使用了 CRLF,Django 处理应用程序编写了一个文件,在每个 CRLF 之前添加了一个 CR。请参阅下面的代码详细信息。
However:这只发生在我的应用程序上,该应用程序位于我客户位于法国的 Windows Server 12R2 VM 上。我的物理 Windows 10 笔记本电脑、我的 ubuntu 实例和我的 AWS Windows Server 12 实例(在安装到客户端计算机上之前用于测试)不会添加 CR。
Caveat:出于安全原因,我只能通过远程桌面访问客户的虚拟机,因此我需要与 IT 团队预约来探索和调试问题。而且,这9个小时的时差,占用了他宝贵的时间。因此,我需要在我的 AWS 实例上重新创建此问题,以便我可以尝试调试我的代码。而且,当我说它引入了 CR 而不是 CRLF 时,那么我可能记错了——可能是我的代码引入了 LF 而不是 CRLF。我一直在使用 Notepad++ 和“显示所有字符”,以便在生成的文件中查看 CR(或 LF)和 CRLF。我认为 Notepad++ 说我的错误文件是“Macintosh”,而我的启动模板文件是“Dos\Windows”。
So what:嗯,生成的文件是一个 R 脚本。而且,Windows R 不喜欢将 CR 作为换行符,在读取第一行后会给出错误。如果我获取生成的 R 脚本并在 Notepad++ 中打开它,然后将换行符(通过状态栏右下角)更改为 Dos\Windows,那么我的 Rscript 将正常工作。
更多细节:这是一些代码,以便您可以准确地看到我如何读取/渲染模板以及如何将其保存到文件中。我的模板和模板字典中都没有非 ASCII 字符,所以我不怀疑这是一个 unicode 问题(我使用的是 python 2):
rstring = render_to_string('helpers.R') + "\n" + render_to_string('Rcalc-template.R', {'debug':1})
rscript_file = os.path.join(tmpdir, 'Rcalc-rendered.R')
fh = open(rscript_file, mode="w")
with fh:
fh.write(rstring)
subprocess.call(['Rscript', rscript_file],
universal_newlines=True,
stdout=log_filename,
stderr=subprocess.STDOUT,
shell=False)
我需要你做什么:如果有人知道如何让我的 AWS Windows 2012R2 实例表现得像法国的 Windows 2012R2 虚拟机,那么这将非常有帮助。我尝试将 AWS 实例的语言更改为法语,但这并没有成功,即我的应用程序生成的文件仅包含 CRLF。我不太确定从这里该去哪里。提前致谢!