簡體   English   中英

Python腳本不會從存檔中刪除文件-通過終端打印的命令可以正常工作

[英]Python script doesn't delete file from archive — printed command via terminal works fine

我正在使用以下代碼在Python中創建檔案:

#Creates archive using string like [proxy_16-08-15_08.57.07.tar]
proxyArchiveLabel = 'proxy_%s' % EXECUTION_START_TIME + '.tar'
log.info('Packaging %s ...' % proxyArchiveLabel)

#Removes .tar from label during creation
shutil.make_archive(proxyArchiveLabel.rsplit('.',1)[0], 'tar', verbose=True)

因此,這會在本地目錄中創建一個很好的存檔。 問題是,由於其大小和執行此任務的必要性,我要刪除的存檔中有一個特定目錄。

ExecWithLogging('tar -vf %s --delete ./roles/jobs/*' % proxyArchiveLabel)
# ------------
def ExecWithLogging(cmd):
    print cmd
    p = subprocess.Popen(cmd.split(' '), env=os.environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while(True):
      log.info(p.stdout.readline().strip())
      if(p.poll() is not None):
        break

但是,這似乎基本不起作用。 大小保持不變。 如果我在ExecWithLogging內打印cmd並將該命令復制/ ExecWithLogging到腳本工作目錄中的終端,則可以正常工作。 可以肯定的是,我還嘗試對作為tar -vf %s --delete命令一部分的創建歸檔文件的完整路徑進行硬編碼,但是似乎什么都沒有發生。

我確實在INFO日志中獲得了以下輸出: tar: Pattern matching characters used in file names ,因此我有點想Popen會以某種方式錯誤地解釋了我的命令...(或者,我更可能錯誤地傳遞了一些內容)。

難道我做錯了什么? 我還能嘗試什么?

您可能必須在tar命令中使用--wildcards選項,以啟用模式匹配。 這可能就是您在日志中看到的內容,盡管有些含糊。

編輯:在回答您的問題為什么? 我懷疑外殼正在執行通配符擴展,而通過Popen提供的命令卻沒有。 tar的--wildcard選項強制tar執行通配符擴展。
有關詳細說明,請參見此處:
焦油和通配符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM