@python_beginnersЭта группа больше не существует

Страница 1468 из 1885
Alex
25.03.2017
15:55:29
Igor
25.03.2017
15:58:40
Tony
25.03.2017
15:58:51
Igor
25.03.2017
15:59:29
вот видишь, с третьего раза ок

Google
Проксимов
25.03.2017
15:59:45
нет
Когда скомпилилось с 3 раза

Tony
25.03.2017
16:00:09
))

Артурий
25.03.2017
16:12:42
s

во народ пошёл, не здоровается

Dmitriy
25.03.2017
16:14:00
Ку

melancholiac
25.03.2017
16:17:06
@app.route('/download') def download(): return send_from_directory(directory = '.',filename='test.txt',as_attachment=True) почему скачиваемый файл урезается до 5 кб?

Артурий
25.03.2017
16:18:16
Ку
прветствую, приветливый человек

melancholiac
25.03.2017
16:18:17
перехожу по http://127.0.0.1:5000/download

Артурий
25.03.2017
16:19:02
я на курсы давненько записался от Валерия Бовсуновского, кто-то слышал, может состоит в его секте ? (:

melancholiac
25.03.2017
16:19:27
как скачиваешь?
разве это влияет?

Артурий
25.03.2017
16:25:15
стало быть никто

ок, если кто в теме-напишите в лс

Google
Igor
25.03.2017
16:25:25
перехожу по http://127.0.0.1:5000/download
код ффункции send_from_directory

можешь еще посмотреть заголовки, которые отправляются браузером при запросе /download

и заголовки, которые отправляются сервером в ответе

melancholiac
25.03.2017
16:27:41
код ффункции send_from_directory
я так понял мне не подходит эта функция?

Igor
25.03.2017
16:27:52
если отправляется только 5 кб, а не целиком файл, я б посмотрел, как работает код, который собственно этот файл читает

потом - хттп-заголовки в обе стороны

кстати, скока байт файл получается при скачивании? а сколько - в оригинале?

melancholiac
25.03.2017
16:29:51
du -h test.txt 1.1G test.txt

curl -Gi http://127.0.0.1:5000/download HTTP/1.0 200 OK Content-Disposition: attachment; filename=test.txt Content-Length: 1073741824 Content-Type: text/plain; charset=utf-8 Last-Modified: Sat, 25 Mar 2017 16:09:55 GMT Cache-Control: public, max-age=43200 Expires: Sun, 26 Mar 2017 04:30:19 GMT ETag: "1490458195.553968-1073741824-568528516" Date: Sat, 25 Mar 2017 16:30:19 GMT Accept-Ranges: bytes Server: Werkzeug/0.12.1 Python/3.6.0

Igor
25.03.2017
16:31:35
content-length нормальный, прикоооольно

а с -v сделай?

curl тоже 5 кб получает?

melancholiac
25.03.2017
16:32:32
curl -Giv http://127.0.0.1:5000/download * Trying 127.0.0.1... * TCP_NODELAY set * Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0) > GET /download HTTP/1.1 > Host: 127.0.0.1:5000 > User-Agent: curl/7.53.1 > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 200 OK HTTP/1.0 200 OK < Content-Disposition: attachment; filename=test.txt Content-Disposition: attachment; filename=test.txt < Content-Length: 1073741824 Content-Length: 1073741824 < Content-Type: text/plain; charset=utf-8 Content-Type: text/plain; charset=utf-8 < Last-Modified: Sat, 25 Mar 2017 16:09:55 GMT Last-Modified: Sat, 25 Mar 2017 16:09:55 GMT < Cache-Control: public, max-age=43200 Cache-Control: public, max-age=43200 < Expires: Sun, 26 Mar 2017 04:32:20 GMT Expires: Sun, 26 Mar 2017 04:32:20 GMT < ETag: "1490458195.553968-1073741824-568528516" ETag: "1490458195.553968-1073741824-568528516" < Date: Sat, 25 Mar 2017 16:32:20 GMT Date: Sat, 25 Mar 2017 16:32:20 GMT < Accept-Ranges: bytes Accept-Ranges: bytes < Server: Werkzeug/0.12.1 Python/3.6.0 Server: Werkzeug/0.12.1 Python/3.6.0

Igor
25.03.2017
16:32:38
ну, то есть, не может же быть что все клиенты запрашивают range первых пяти килобайт, да? значит сервак че-т лошара

хм, а вон клиент запросил HTTP/1.1, а получил ответ в HTTP/1.0

че-т странно

melancholiac
25.03.2017
16:33:55
че-т странно
но это 100% я гдето накосячил

Igor
25.03.2017
16:35:28
ну, если глобально посудить, то ты через питон зачем-то просто пропихиваешь целиком обычный статичный текстовый файл

Google
melancholiac
25.03.2017
16:35:31
может дело в том что у меня в этом файле нули?

Igor
25.03.2017
16:35:39
нули в смысле NUL-байты?

\0?

melancholiac
25.03.2017
16:36:19
\0?
я создавал dd if=/dev/zero of=/path/to/my/file bs=1G

Igor
25.03.2017
16:37:09
ага, NULы

ваще хорошее предположение, но тогда наверное вообще бы никакого контента не ушло

потому что обычно строки обрезаются до первого нулбайта

melancholiac
25.03.2017
16:38:11
сейчас пару метров из urandom'а сгенерю

Igor
25.03.2017
16:38:24
давай. или lorem ipsum текстовый в пару станиц, чтоб уж наверняка

кстати, может там можно параметром выбрать режим, в котором надо открыть файл?

Igor
25.03.2017
16:39:12
хотя с учетом того, что эта функция использовалась бы обычно для всяких картинок и пдфок, наверное, файл и так бинарно читается

Igor
25.03.2017
16:39:16
в send_from_directory

melancholiac
25.03.2017
16:39:23
1мб рандомный файл тоже 5кб приходит

Igor
25.03.2017
16:39:40
filename_or_fp - о, эти функции принимают файловый объект

а попробуй скормить так send_from_directory(open('/path/to/file.dat', 'rb'))

Igor
25.03.2017
16:40:18
wc -c /path/to/file.dat

откуда тогда предположение про 5кб

melancholiac
25.03.2017
16:41:45
wc -c test.txt 1048576 test.txt

Google
Igor
25.03.2017
16:42:40
че-т я запутался. это с dd if=/dev/urandom?

Igor
25.03.2017
16:43:25
1мб рандомный файл тоже 5кб приходит
а скок точно байт-то можешь еще через xxd посмотреть файлик в hex

melancholiac
25.03.2017
16:43:36
тепер я поменял на return send_from_directory(open('testq.txt', 'rb')) такого файла в каталоге нет, должна быть ошибка, но мне до сиз пор приходит test.txt в 5кб

Igor
25.03.2017
16:43:55
а он сам пишет, что он reloading при сохранении исходников?

melancholiac
25.03.2017
16:44:06
* Detected change in '/home/melancholiac/yafr/yafr/main.py', reloading * Restarting with stat * Debugger is active! * Debugger PIN: 186-584-341

Admin
ERROR: S client not available

melancholiac
25.03.2017
16:46:20
я видемо где-то не тут ошибся

Igor
25.03.2017
16:46:25
он в дебагмоде
а если ^C и потом find . | grep -E "(__pycache__|\.pyc$)" | xargs rm -rf (грохнуть все файлики с байткодом, юзаются для кеширования) и потом запустить снова и попрбовать еще раз?

еще лучше укажи абсолютный путь до файлов везде

а то мало ли

но вообще, ты изначально делаешь так, как на проде никто делать не будет :)

статику должен отдавать nginx или че-нибудь подобное. у тебя как раз статика.

melancholiac
25.03.2017
16:49:17
а то мало ли
нет ни пайкеш ни путь тут не при чем

Igor
25.03.2017
16:49:28
прокси?

melancholiac
25.03.2017
16:49:30
я: чикчик и продекшен нормальный человек: почитать как передаются файлы в сети

Google
Igor
25.03.2017
16:52:27
да ладно тебе. просто если тебе очень надо именно через фласк/веркцойг попробовать, то можем дальше попробовать разобраться

но вообще да, вообще даже во фласке и джанге в документации пишут, что, мол, хоть у нас и runserver умеет отдавать статику и все такое прочее, но делается это неэффективно, поэтому пиздуйте поднимать нормальную архитектуру

Igor
25.03.2017
16:54:12
будут, но через uwsgi

есть ли вероятность того, что у тебя несколько вьюх, ты их копипастил, и поменял путь в app.route(), но забыл переименовать саму функцию (def)?

а фласк и нгикс не будут работать вместе?
у digitalocean отличные статьи на многие подобные темы есть. вот для убунты 16.04, фласка, увсги и нгинкса. https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

Igor
25.03.2017
16:56:30
можешь расставить print()ы на каждый чих (чуть ли не через каждую строчку), сразу понятнее должно стать

ну, естественно, чтобы они с разным содержимым были, чтобы было понятно, когда что запустилось :)

Даниил
25.03.2017
16:58:15
мб тогда дебаггер?

Igor
25.03.2017
16:58:52
мб тогда дебаггер?
как вариант :) я просто хз, что он использует, а в дебаггерах еще разбираться надо, если опыта нет

особенно в pdb обычном %)

Даниил
25.03.2017
16:59:22
PyCharm :)

melancholiac
25.03.2017
17:00:47
поменял / чтоб он возвращал "123" -> 123 поменял /download чтоб он возвращал "123" -> возвращает файл 5 кб

может дело в браузере?

Igor
25.03.2017
17:00:57
давай сюда исходник

может пробуй курлом

Страница 1468 из 1885

Эта группа больше не существует Эта группа больше не существует