2012-10-03 54 views
1

我正在使用python來自動提取歸檔文件。我使用的子這樣:使用7zip來提取.rar文件,但找不到歸檔文件

command = "7z e " + self.dir + " -o" + dest 
subprocess.call(command) 

其中self.dir是歸檔文件的目錄中(作爲一個.rar文件)和dest是目標文件夾。

我的問題是它隨意地工作。出於某種原因,它會提取一些檔案,但不是其他檔案。我還沒有找到一個模式,但我已閱讀命令提示符,然後當它不工作,它打印

Error: 
cannot find archive 

煩人,我可以使用GUI提取完全相同的存檔。我的實際程序似乎有問題。

我能做些什麼來解決這個問題?

+0

我相信如果你使用大字符串作爲命令參數,那麼你應該做subprocess.call(args,shell = True)。如果你知道你的7z在哪裏,那就用一個參數列表來代替。 – nagylzs

+0

@nagylzs知道7z在哪裏並不重要。如果你做''subprocess.call([「foo」,「bar」])'',子進程會爲你做必要的「foo」查找。 –

回答

1

你目前的目錄是什麼?請檢查您的「self.dir」是否是完整的文件路徑,而不僅僅是相對路徑。試試這個檢查:

print os.path.abspath(self.dir) 
print os.getcwd() 
print os.path.isfile(self.dir) 

順便說一句,使用「目錄」作爲屬性名稱是不幸的。 dir是一個內置函數。

+0

獲取命令的完整路徑爲我修復了它! – r2d2oid

1

我認爲subprocess.call()需要一個列表,當你傳遞參數。試試這個:

command = ["7z", "e", self.dir, "-o", dest] 
1

將引號加到你的目錄字符串中。您可能有空間混淆了壓縮程序。