每当尝试创建新目录时,azure函数中的python错误
我正在尝试使用azure函数为python创建一个新的目录文件夹。但我无法在azure functions for python中创建新的目录和文件。我犯了以下错误 每当我在本地上为python执行Azure函数时,它都可以正常工作,但在Azure上不行 错误:-每当尝试创建新目录时,azure函数中的python错误,python,directory,azure-functions,Python,Directory,Azure Functions,我正在尝试使用azure函数为python创建一个新的目录文件夹。但我无法在azure functions for python中创建新的目录和文件。我犯了以下错误 每当我在本地上为python执行Azure函数时,它都可以正常工作,但在Azure上不行 错误:- Error in folder creation: [Errno 30] Read-only file system: './HttpTrigger/logs' import logging import struct import
Error in folder creation: [Errno 30] Read-only file system: './HttpTrigger/logs'
import logging
import struct
import sys
import azure.functions as func
import os
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
try:
if not os.path.exists('./HttpTrigger/logs'):
logging.info('Inside Forlder Creation')
os.makedirs('./HttpTrigger/logs')
f= open("test.txt","w+")
for i in range(10):
logging.info('Inside For')
f.write("This is line %d\r\n" % (i+1))
logging.info('Outside For')
f.close()
return func.HttpResponse("Created",
status_code=200
)
except Exception as e:
return func.HttpResponse(f"Error in floder creation : {e}", status_code=400)
我试图在HttpTrigger函数中创建新的日志文件夹,但出现上述错误
请检查以下代码:-
Error in folder creation: [Errno 30] Read-only file system: './HttpTrigger/logs'
import logging
import struct
import sys
import azure.functions as func
import os
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
try:
if not os.path.exists('./HttpTrigger/logs'):
logging.info('Inside Forlder Creation')
os.makedirs('./HttpTrigger/logs')
f= open("test.txt","w+")
for i in range(10):
logging.info('Inside For')
f.write("This is line %d\r\n" % (i+1))
logging.info('Outside For')
f.close()
return func.HttpResponse("Created",
status_code=200
)
except Exception as e:
return func.HttpResponse(f"Error in floder creation : {e}", status_code=400)
有没有办法在azure functions for python中创建新目录?请告诉我是否有任何方法。Azure函数(以及更一般的无服务器函数)的要点是由特定事件触发,执行一些逻辑,然后退出。它不像普通的服务器,您可以访问文件系统,也可以读取/写入文件。实际上,你不能确定它总是由同一台物理机器执行;Azure为您抽象了所有这些概念(因此命名为“无服务器”)
现在,如果你真的需要写文件,你应该看看。这是一个云本地服务,您可以在其中下载和上传文件。从Azure功能中,您必须使用Blob存储API来操作文件。您的实际应用程序文件夹将从zip读取,因此不允许您创建文件夹或文件。但是,您应该能够在中创建临时目录,如/tmp目录。也就是说,你不应该依赖于他们的存在,他们(顾名思义)只是暂时的。因此,请坚持@frankie567的建议,使用Azure Storage之类的工具来存储您希望稍后提取的工件。您可以在临时文件夹或函数执行文件夹中创建文件或目录,因为临时文件夹中的内容不会一直保存,因此您可以在执行目录中创建目录,您可以使用
Context
binding使用function\u目录
获取目录。有关更多信息,请参阅此文档:
下面是我的测试代码,我创建文件夹和文件,然后发送文件名作为响应
import logging
import os
import time
import datetime
import json
import azure.functions as func
def main(req: func.HttpRequest,context: func.Context) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
t = datetime.datetime.now().strftime("%H-%M-%S-%f")
foldername=context.function_directory+"/newfolder"+t
os.makedirs(foldername)
suffix = ".txt"
newfile= t+suffix
os.getcwd()
os.chdir(foldername)
if not os.path.exists(newfile):
f = open(newfile,'w')
f.write("test")
f.close()
data=[]
for filename in os.listdir(context.function_directory):
print(filename)
d1={"filename":filename}
data.append(d1)
jsondata=json.dumps(data)
return func.HttpResponse(jsondata)
这是结果图片,你可以看到我可以创建文件夹和文件
如果您需要临时处理一些文件,那么azure函数将提供一个临时目录。 下面是一段代码片段
导入临时文件
从操作系统导入listdir
tempFilePath=tempfile.gettempdir()
fp=tempfile.NamedTemporaryFile()
fp.write(b'helloworld!')
filedirlistinemp=listdir(tempFilePath)
你能用我的方式实施吗?@Akshay Godase,如果这对你有帮助,请接受它作为答案。谢谢我尝试使用上下文获取函数目录并将文件写入该目录。看起来仍然存在权限问题。错误:结果:失败异常:OSError:[Errno 30]只读文件系统:'/home/site/wwwroot/confluence/audio_20200629.wav'。你能帮忙吗。