2017-07-30 6 views
-1

Je dois passer le chemin du sous-répertoire d'un répertoire temporaire à une autre fonction.Comment obtenir le chemin du sous-répertoire d'un répertoire temporaire dans Django

scénario réel:

utilisateur télécharge une archive zip ou tar il sera extrait dans un répertoire temporaire, maintenant je dois le chemin de ce répertoire extrait.

est-il un moyen d'obtenir le chemin d'un sous-répertoire dans le cas où nous ne pouvions pas connaître le nom de ce répertoire? Voici ce que je fais dans le code;

views.py

  if form.is_valid(): 
       deployment = TarWithDocker() 
       deployment.name = form.cleaned_data['name'] 
       deployment.user = request.user 
       deployment.archive = form.cleaned_data['archive'] 
       deployment.save() 
       tmpdir = tempfile.mkdtemp() 
       saved_umask = os.umask(0o077) 
       path = os.path.join(tmpdir) 
       arpath = deployment.archive.path 
       patoolib.extract_archive(arpath, outdir=path) 
       client = docker.from_env() 
       dirp = os.path.join(path) 
       client.images.build(path=# Here i need to pass sub path of directory of temp dir #} 
           , gzip=False, tag='newdep') 
       os.umask(saved_umask) 
       shutil.rmtree(tmpdir) 

Aidez-moi, s'il vous plaît! Merci à l'avance!

+0

peut vous donner l'exemple ce qui est chemin dans votre code et ce que vous voulez réellement – Vaibhav

Répondre

2

Étant donné que vous exécutez

client = docker.from_env() 
client.images.build(...) 

Je suppose que vous attendez un Dockerfile dans l'archive.

Ainsi, après l'extraction des données dans tmpdir, essayez ceci:

import glob 

docker_glob = os.path.join(tmpdir, "*", "Dockerfile") 
docker_file = glob.glob(docker_glob)[0] 
docker_folder = os.path.dirname(docker_file) 
client.images.build(path=docker_folder, ...) 
+0

ça marche pour moi, j'était nécessaire que pour deux scenerios une avec dockerfile mais un autre scénario ne peut pas avoir dockerfile, donc dans ce cas j'ai utilisé package.json au lieu de dockerfile et ça marche bien! Merci @Harald –

+0

Maintenant, encore une fois, il lance: 'docker_file = glob.glob (docker_glob) [0] IndexError: liste index hors plage' Erreur! –