как написать или создать (если не существует) файл с использованием Python и Google AppEngine - PullRequest
3 голосов
/ 21 апреля 2010

это мой код:

f = open('text/a.log', 'wb')
f.write('hahaha')
f.close()

и он не создает новый файл, когда он не существует

как это сделать,

спасибо

обновлен

class MyThread(threading.Thread):
    def run(self):
        f = open('a.log', 'w')
        f.write('hahaha')
        f.close()

ошибка:

Traceback (most recent call last):
  File "D:\Python25\lib\threading.py", line 486, in __bootstrap_inner
    self.run()
  File "D:\zjm_code\helloworld\views.py", line 15, in run
    f = open('a.log', 'w')
  File "d:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1188, in __init__
    raise IOError('invalid mode: %s' % mode)
IOError: invalid mode: w

Ответы [ 5 ]

9 голосов
/ 21 апреля 2010

Вы используете Google App Engine.

Из документации по Google App Engine :

Песочница

Приложения работают в защищенной среде, которая обеспечивает ограниченный доступ к базовой операционной системе. Эти ограничения позволяют App Engine распределять веб-запросы для приложения на несколько серверов, а также запускать и останавливать серверы для удовлетворения требований трафика. Песочница изолирует ваше приложение в его собственной безопасной и надежной среде, которая не зависит от аппаратного обеспечения, операционной системы и физического расположения веб-сервера. Примеры ограничений среды безопасной изолированной программной среды включают в себя:

  • Приложение не может записать в файловую систему. Приложение может читать файлы, но только файлы, загруженные с кодом приложения. Приложение должно использовать хранилище данных App Engine, memcache или другие службы для всех данных, которые сохраняются между запросами.
7 голосов
/ 21 апреля 2010

Это из-за Google Appengine не позволяет вам писать файлы

его определить так

ALLOWED_MODES = frozenset(['r', 'rb', 'U', 'rU'])

и

if mode not in FakeFile.ALLOWED_MODES:
  raise IOError('invalid mode: %s' % mode)

Примечание : «U» - универсальный режим новой строки, http://docs.python.org/library/io.html#io.open

Редактировать : Вас может заинтересовать Google AppEngine Ведение журнала сессии в их документах

Пример * * тысяча двадцать-одна

import logging
....
logging.error('There was an error retrieving ...')
logging.debug('Finish something')
3 голосов
/ 21 апреля 2010

Вы не показываете ошибку, которую получаете;несмотря на то, что сообщество просило вас сделать это здесь и в предыдущих вопросах.

Я ожидаю, что вы получите IOError, потому что каталог text еще не создан.

Вместо этого используйте что-то вроде этого:

from __future__ import with_statement
import os

dir = 'text'
filename = 'a.log'
log_path = os.path.join(dir, filename)

if not os.path.exists(dir):
    os.makedirs(dir)

with open(log_path, 'w') as f:
    f.write("Nobody expects the Spanish inquisition!")

Примечания:
Объединение путей с косой чертой - это хороший способ написания кода, который не работает кроссплатформенно.

Открытие файлов с помощью оператора with .Файл закрывается в конце блока with.Используйте from __future__ import with_statement в версиях <= 2.5 </p>

0 голосов
/ 21 апреля 2010

согласовано с @bp и @ S.Mark: App Engine не позволяет создавать файлы ... точка. в дополнение к странице, на которую указывает @bp, она документирована еще в нескольких местах:

http://code.google.com/appengine/docs/java/overview.html http://code.google.com/appengine/docs/python/overview.html

в частности, эти страницы заявляют: «... приложение не может порождать потоки, записывать данные в локальную файловую систему или устанавливать произвольные сетевые подключения».

Интересно, что ОП попробовал 2 из 3.: -)

однако, если вам нужны определенные файлы, вам необходимо загрузить их вместе с приложением, либо отдельные файлы, либо набор, брошенный в ZIP-архив. наконец, если у вас действительно большие файлы, вы можете рассмотреть возможность использования Blobstore (до 50 МБ каждый):

http://code.google.com/appengine/docs/python/blobstore/ http://code.google.com/appengine/docs/java/blobstore/

0 голосов
/ 21 апреля 2010

Скорее всего, относительный путь к каталогу с текстом не существует. Проверьте путь DIR и затем откройте файл в режиме записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...