在法国 Windows Server 上使用 django 换行的问题

2024-04-13

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。我不太确定从这里该去哪里。提前致谢!


Django 版本我有机会远程访问部署代码的服务器几分钟,发现 Django 版本存在差异!我部署的服务器有 django 1.7.1,我的测试版本有 1.8.17。因此,我转到我的测试 AWS 服务器并将 Django 版本移回 1.7.1,果然,该错误是可重现的!所以,这不是 Windows、本地化或语言问题......

在发行说明中,它提到了支持File for 通用换行符: https://docs.djangoproject.com/en/1.10/releases/1.8 https://docs.djangoproject.com/en/1.10/releases/1.8

我认为这是修复它的票证和提交?

https://code.djangoproject.com/ticket/8149 https://code.djangoproject.com/ticket/8149 https://github.com/django/django/commit/eb4f6de980c5148ba48d4ed67f31cca27dd132a8 https://github.com/django/django/commit/eb4f6de980c5148ba48d4ed67f31cca27dd132a8

我还可以通过将所有 '\r' 替换为 '\n' 来解决该问题:

rstring = rstring.replace("\r", "\n")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在法国 Windows Server 上使用 django 换行的问题 的相关文章

随机推荐