2017-07-30 194 views
-1

我需要將臨時目錄的子目錄路徑傳遞給另一個函數。如何獲取Django中臨時目錄的子目錄路徑

真實的情景:

用戶會上傳一個zip或tar歸檔,然後將一個臨時目錄中提取,現在我需要提取目錄的路徑。

有沒有辦法獲得子目錄的路徑,以防我們無法知道該目錄的名稱? 這是我在代碼中做的事情;

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) 

請幫助我! 在此先感謝!

+0

你能給例如什麼在你的代碼和你真正想要 – Vaibhav

回答

2

既然你正在運行

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

我會假設你期待在歸檔中的Dockerfile

所以將數據提取到tmpdir後,試試這個:

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

工作對我來說什麼路,我需要的是兩個scenerios一個與碼頭文件,但另一種情況下不能有dockerfile,所以在這種情況下,我已經使用package.json而不是dockerfile,它工作正常!謝謝@Harald –

+0

現在,它再次拋出:'docker_file = glob.glob(docker_glob)[0] IndexError:列表索引超出範圍錯誤! –