Задача: Приложение Django представляет CR перед каждым CRLF при записи в файл строки, которая была прочитана через render_to_string. В файлах шаблонов я использовал CRLF, и приложение обработки Django записывает файл, который добавляет CR перед каждым CRLF. Подробнее см. Ниже.Проблемы с Newlines с использованием django на Windows Server во Франции
Однако: это происходит только с моим приложением, которое находится на моем компьютере клиентов Windows Server 12R2, который находится во Франции. Мой физический компьютер с Windows 10, мои экземпляры ubuntu и мой экземпляр AWS Windows Server 12 (который я использую для тестирования перед установкой на машине моего клиента) не добавляют CR.
Caveat: Из соображений безопасности я могу получить доступ только к виртуальной машине моего клиента через удаленный рабочий стол, поэтому мне нужно назначить встречу с группой ИТ, чтобы изучить и отладить проблему. И это 9-часовая разница во времени и занимает его драгоценное время. Таким образом, мне нужно воссоздать эту проблему на моем экземпляре AWS, чтобы попытаться отладить мой код. И, когда я говорю, что он вводит CR вместо CRLF, тогда я, возможно, помню это неправильно - возможно, мой код вводит LF вместо CRLF. Я использовал Notepad ++ и «показываю все символы», чтобы увидеть CR (или LF) и CRLF в сгенерированных файлах. Я думаю, что Notepad ++ сказал, что мой ошибочный файл - «Macintosh», в то время как мой начальный файл шаблона - «Dos \ Windows».
Итак, что: Ну, сгенерированный файл является скриптом R. И окна R не любят CR как символы новой строки, вызывая ошибку после прочтения первой строки. Если я возьму сгенерированный R-скрипт и откройте его в Notepad ++, а затем измените новые строки (через нижнюю правую сторону строки состояния) на Dos \ Windows, тогда мой Rscript будет работать нормально.
Еще несколько деталей: Вот некоторые из кода, чтобы вы могли точно видеть, как я читаю/отрисовка шаблона и как я сохраняю его в файле. Там нет не-ASCII символов в шаблоне, ни в шаблоне Словаре, так что я не подозреваю, что это проблема юникода (Я использую 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. Я не совсем уверен, куда идти отсюда. Заранее спасибо!
Может быть, мне нужно записать файл обратно в двоичном режиме вместо так что python не настраивает новые строки? http://stackoverflow.com/questions/41369772/how-to-change-end-of-line-conventions – brfox
или другая ссылка: http://stackoverflow.com/questions/2536545/how-to-write-unix- end-of-line-characters-in-windows-using-python – brfox
В Windows запись '\ n' в файл переводится в' \ r \ n', если вы не укажете двоичный режим при открытии файла. Используйте '' wb'', если вы пишете '\ r \ n' явно, или вместо этого вы получите' \ r \ r \ n'. –