如何使用python和Google AppEngine编写或创建(不存在时)文件

如何使用python和Google AppEngine编写或创建(不存在时)文件,python,google-app-engine,file,Python,Google App Engine,File,这是我的代码: 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 rec

这是我的代码:

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

你没有显示你得到的错误;尽管社区在这里和前面的问题中恳求你这样做

我希望您得到一个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
块的末尾关闭。在版本中使用
from\uuuuu future\uuuu导入with\u语句
,很可能是“text”的相对目录路径不存在。检查目录路径,然后以写模式打开文件

这是因为谷歌appengine不允许你写文件

它的定义是这样的

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

注意:“U”是通用换行符模式

编辑:您可能会对他们的文档感兴趣

范例

import logging
....
logging.error('There was an error retrieving ...')
logging.debug('Finish something')

您正在使用Google应用程序引擎

从:

沙盒 应用程序在安全环境中运行,该环境提供对底层操作系统的有限访问。这些限制允许App Engine跨多个服务器分发应用程序的web请求,并启动和停止服务器以满足流量需求。沙盒将您的应用程序隔离在自己的安全可靠环境中,该环境独立于硬件、操作系统和web服务器的物理位置。 安全沙盒环境的限制示例包括:

  • 应用程序无法写入文件系统。应用程序可以读取文件,但只能读取使用应用程序代码上载的文件。对于请求之间持续存在的所有数据,应用程序必须使用应用程序引擎数据存储、memcache或其他服务

同意@bp和@S.Mark:应用程序引擎不允许您创建文件。。。时期除了@bp指出的页面外,还有其他几个地方记录了该页面:

具体地说,这些页面声明,“…应用程序无法生成线程、将数据写入本地文件系统或进行任意网络连接。”

有趣的是,OP尝试了3个中的2个。:-)

然而,如果你想要某些文件,你需要将它们与你的应用程序一起上传,可以是单个文件,也可以是一堆扔进ZIP存档的文件。最后,如果你有很大的文件,你可能希望考虑使用BubStury(最多50MB):


嗯,它在这里起作用。。。也许你可以检查一下你是否有权限在这个目录中写东西?检查一下你当前的工作目录。确保有一个文本子目录。确保您能够读取和写入文本目录。如果该目录中已存在文件a.log,请确保您能够写入该文件。祝你好运。你能给我们看看追踪结果吗?回溯包含有价值的信息你真是太酷了+1用于在错误消息中发现appengine!谷歌人?这是指“我在使用谷歌并回答你”还是“我来自谷歌?”或“谷歌手册页”?@S.Mark.可能是第二个。如果谷歌在阻止自己,那会很有趣:)(检查S.Mark的个人资料)如果你想证明,请查看stacktrace:
文件“d:\Program Files\google\google\appengine\tools\dev\u appserver.py”,第1188行,在uuu init uuuu中
import logging
....
logging.error('There was an error retrieving ...')
logging.debug('Finish something')