[英]How to delete a file from docker container volume with python programmatically?
我们的项目有一个 docker-compose.yml 文件。 我们的容器有一个卷。 我可以将一个.zip 文件添加到此卷中以进行测试。 然后我可以将 zip 文件提取到卷文件夹的子文件夹中。 但是我必须从子文件夹中删除不必要的文件和文件夹。 我只需要 HTML 文件即可进行此测试。 出于这个原因,我必须删除文件和目录。 我对文件使用“os.remove”方法,对非空目录使用“shutil.rmtree”方法。 但是,子文件夹中的 没有任何更改。 这些不必要的文件和目录不会从 docker 容器卷中删除。 你能帮我解决这个问题吗?
PRE_RELEASE_ZIP_FILE_FOLDER = "/app_testing_data/pre_release_test_folder/"
for file_name in folder_list_array:
if ensure_file_extension(file_name,"html") == False:
if "." in file_name:
try:
os.remove(Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
logger.logCritical("os.remove -> file_name -> " +Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
#os.unlink(Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
except Exception as e:
logger.logError("os.remove:"+str(e))
else:
try:
shutil.rmtree(Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
logger.logCritical("shutil.rmtree -> file_name -> " +Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
except Exception as e:
logger.logError("shutil.rmtree:"+str(e))
folder_list_array.remove(file_name)
我的 for 循环逻辑看起来不错。 我不接受任何错误。
然后,我使用“exec -it bash”命令检查我的容器。 没有任何变化。 我需要删除 html 文件以外的文件。
编辑评论:
首先,我上传了一个.zip 文件并保存。 :
if ensure_file_extension(uploaded_zip.filename, "zip"):
logger.logDebug("uploaded result : "+ str(ensure_file_extension(uploaded_zip.filename, "zip")))
uploaded_zip_filename = uploaded_zip.filename
ensure_dir_exists("/app_testing_data")
# Directory
directory = "pre_release_test_folder"
# Parent Directory path
parent_dir = "/app_testing_data"
path = os.path.join(parent_dir, directory)
try:
os.makedirs(path, exist_ok = True)
logger.logDebug("Directory '%s' created successfully" % directory)
except OSError as error:
logger.logDebug("Directory '%s' can not be created" % directory)
zip_save_path = os.path.join(path, uploaded_zip_filename)
uploaded_zip.save(zip_save_path)
然后我提取了这个.zip文件:
zip_file_path = Constant.PRE_RELEASE_ZIP_FILE_FOLDER + self.targetKitName # self.targetKitName this is actually zip file name.
with ZipFile(zip_file_path, 'r') as zipObj:# Extract all the contents of zip file in current directory
zipObj.extractall(Constant.PRE_RELEASE_ZIP_FILE_FOLDER)
我可以成功提取。 您可以从上面 docker 容器执行程序的第二张图像中看到这一点。
我建议您将代码更改为以下内容(使用rm -rf
而不是os.remove
,因为我们已经知道如何从这个答案中使用rm -rf
解决它):
import subprocess
PRE_RELEASE_ZIP_FILE_FOLDER = "/app_testing_data/pre_release_test_folder/"
for file_name in folder_list_array:
if ensure_file_extension(file_name,"html") == False:
if "." in file_name:
try:
subprocess.run(["rm", f"'{Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name}'"])
logger.logCritical("os.remove -> file_name -> " +Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
#os.unlink(Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
except Exception as e:
logger.logError("os.remove:"+str(e))
else:
try:
shutil.rmtree(Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
logger.logCritical("shutil.rmtree -> file_name -> " +Constant.PRE_RELEASE_ZIP_FILE_FOLDER+file_name)
except Exception as e:
logger.logError("shutil.rmtree:"+str(e))
folder_list_array.remove(file_name)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.