Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
15 / 15 / 1
Регистрация: 15.01.2018
Сообщений: 42
1

Pythonanywhere не перезаписываются данные в файле

07.04.2018, 22:36. Показов 2652. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создал вебхук на Flask для телеграм бота. Задача написать бота, который выдаёт ДЗ. Храню на pythonanywhere

Кликните здесь для просмотра всего текста
index()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@app.route('/', methods=['POST', 'GET'])
hwork_file = open('domashka.txt', 'a')
hwork_read = open('domashka.txt')
def index():
    if request.method == 'POST':
        r = request.get_json()
        chat_id = r['message']['chat']['id']
        message = r['message']['text']
 
        if message.startswith('/domashka add'):
            hwork_file.write(message[13] + "\n")
            send_message(chat_id, 'Выполнено!')
        if message == '/domashka clear':
            hwork_file.truncate()
            send_message(chat_id, 'Выполнено!')
        if message == '/domashka':
 
            for line in f.readlines():
                send_message(chat_id, line),
            send_message(chat_id, 'Выполнено!')
        return jsonify(r)
    return '<h1> Flask </h1>'
send_message()
Python
1
2
3
4
5
def send_message(chat_id, text='none'):
    url = URL + 'sendMessage'
    answer = {'chat_id' : chat_id, 'text' : text}
    r = requests.post(url, json=answer)
    return r.json()

Создал в папке со скриптом файл domashka.txt. Проблема, при выполнении команды /domashka add some приходит уведомление о выполнении телегу, в error логе нету ничего, но файл не изменяется. Соответственно при написании /domashka просто уведомление о выполнении. Если на сайте изменить файл, то чудесным образом команда /domashka работает. Не подскажете как бороться.

Заранее спасибо!

Добавлено через 9 минут
И да @app.route стоит перед методом, не подумайте.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2018, 22:36
Ответы с готовыми решениями:

Не перезаписываются данные в БД
&lt;? switch($act){ // Пользователи case&quot;modify_users&quot;: switch($do) { default: ...

Не перезаписываются данные в бд
Здравствуйте. Возникла такая проблема. Ранее создал таблицу в бд для добавления новостей. В...

Почему перезаписываются данные?
Подкинули очень простенькую программу, но я не могу понять, почему данные в памяти, сохраненные под...

Данные перезаписываются в массиве
Привет, форумчане! В корзину добавляются товары и перезаписываются для одинаковых товаров....

7
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
07.04.2018, 23:05 2
Цитата Сообщение от thematdev Посмотреть сообщение
@app.route('/', methods=['POST', 'GET'])
hwork_file = open('domashka.txt', 'a')
На кой тебе декоратор файла?

Цитата Сообщение от thematdev Посмотреть сообщение
И да @app.route стоит перед методом, не подумайте.
т.е. так
Python
1
2
3
4
5
6
hwork_file = open('domashka.txt', 'a')
hwork_read = open('domashka.txt')
 
 
@app.route('/', methods=['POST', 'GET'])
def index():
?

Добавлено через 2 минуты
Цитата Сообщение от thematdev Посмотреть сообщение
hwork_file = open('domashka.txt', 'a')
hwork_read = open('domashka.txt')
Если мне память не изменяет нельзя открыть один и тот же файл на чтение и запись одновремённо, используй sqlite для этого
0
15 / 15 / 1
Регистрация: 15.01.2018
Сообщений: 42
07.04.2018, 23:08  [ТС] 3
Python
1
2
3
4
5
6
hwork_file = open('domashka.txt', 'a')
hwork_read = open('domashka.txt')
 
 
@app.route('/', methods=['POST', 'GET'])
def index():
Так.
сли мне память не изменяет нельзя открыть один и тот же файл на чтение и запись одновремённо, используй sqlite для этого
Но в еррор логах ничего нету.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
07.04.2018, 23:13 4
Бонус:
PonyORM очень легкая, простая и понятная ORM (для простых задач)
flask-pony пример использования с flask

Добавлено через 1 минуту
Цитата Сообщение от thematdev Посмотреть сообщение
Но в еррор логах ничего нету.
Создай небольшой скриптец с concept proof-ом. Если докажешь что можно писать и читать в файл одновремённо - ок, проблема в другом.
0
15 / 15 / 1
Регистрация: 15.01.2018
Сообщений: 42
07.04.2018, 23:15  [ТС] 5
Python
1
2
3
4
5
6
7
8
9
 
       if message == '/domashka':
            hwork_file.close()
            hwork_file = open('domashka.txt')
            for line in hwork_file:
                send_message(chat_id, hwork_file.readline())
            send_message(chat_id, 'Выполнено!')
            hwork_file.close()
            hwork_file = open('domashka.txt', 'a')
Изменил на нечто подобное, не выводит. Через /domashka add не добавляет(а выполнено пишет). Видимо проблема в pythonanywhere. Мб кто-нибудь подскажет??

З.Ы Лог пустой
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
07.04.2018, 23:24 6
Цитата Сообщение от thematdev Посмотреть сообщение
Но в еррор логах ничего нету.
Python
1
2
3
4
5
6
7
8
9
10
filename = 'dom.txt'
outf = open(filename, 'a')
inf = open(filename)
 
 
print(inf.readline())
outf.write('asdfas\n')
 
print(inf.readline())
outf.write('asdfas\n')
Файл dom.txt записался в момент закрытия дескриптора. Вероятно из-за того что выполнился flush в конце программы, но flask приложение запускает вечный цикл...

Python
1
2
3
4
5
6
7
8
9
filename = 'dom.txt'
 
with open(filename, 'a') as outf, open(filename) as inf:
    print(inf.readline())
    outf.write('asdfas\n')
 
with open(filename, 'a') as outf, open(filename) as inf:
    print(inf.readline())
    outf.write('asdfas\n')
Вот так норм, но всё же PonyORM поверх SQLite куда надёжнее и удобнее чем с файлом нарпямую...

Добавлено через 3 минуты
Цитата Сообщение от thematdev Посмотреть сообщение
message[13]
Вот это записывает 13-й символ а не строку, надо так message[13:]
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
07.04.2018, 23:37 7
Pythonanywhere не перезаписываются данные в файле

thematdev, вот так надо добавить ORM и не мучаться с этим файлом, тем более что ORM даст сразу возможность много чего писать без головной боли (расширять функционал)
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
08.04.2018, 00:12 8
thematdev, ха, так у них вообще в вебе можно bash запустить, с полным доступом, ляпота.

Добавлено через 22 минуты
thematdev, https://python-telegram-bot.org/ я бы это использовал, только не знаю пока как его к wsgi прикрутить

Добавлено через 3 минуты
Хотя у них есть похожий вопрос на github-е https://github.com/python-tele... issues/565
0
08.04.2018, 00:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2018, 00:12
Помогаю со студенческими работами здесь

Почему данные в массиве объектов перезаписываются?
Вроде должно добавлять новый обьект в массив,но данные просто в обьекте перезаписываатся const...

Загрузить данные из файла; добавить данные в файл; вывести данные о файле, с наибольшим количеством обращений
Дан текстовый файл, содержащий информацию о файлах: имя файла; дата создания; количество обращений...

Проблема с Subprocess на PythonAnyWhere
Решить закинуть скрипт на pythonanywhere и получил ошибку. Сам я чайник тот ещё и ничего не...

Ошибка в Bash в pythonanywhere
Объясните что я не так делаю. сперва заливаю на гит затем в баше git pull и выдаётся ошибка и...

P2P server на pythonanywhere
Решил организовать p2p сервер. Вроде pythonanywhere позволяет загружать скрипты. Вот и хочу узнать,...

Ошибка декодирования utf-8 на pythonanywhere
Помогите, пожалуйста, при попытке декодировать json вылетает ошибка декодирования # -*-...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru