2011-07-25 77 views
1

我想通過popenfrom platform import popen)解壓tar文件,並遇到問題。如果我使用交互式腳本,該命令將運行,但如果將其放入.py文件並運行它,則不會運行該命令。蟒蛇,交互式vs腳本調用

基本上,我切換到該目錄並運行popen("tar xvf the_tar.tar")

爲什麼這些不同?它怎麼沒有在腳本中運行?交互式會話和腳本之間的代碼完全相同!

編輯:

確切的腳本如下

import os, time 
from platform import popen 

os.chdir("C:/testing/") 
popen("tar -xvf the_tar.tar") 
+2

在一個相關悉這是您使用Python的版本? os.popen的文檔提到它的使用從v2.6開始已被棄用,而且應該使用'subprocess'模塊。 – sateesh

+0

儘管棄用筆記是正確的,但關於Python 2.7.1和Python 3.1.3的問題,至少可以使用下面我的答案中所示的解決方案。 – Dilettant

回答

5

您應該使用tarfile庫:

from tarfile import TarFile 

tar = TarFile("the_tar.tar") 
tar.extractall() 
+0

這是可行的,但爲什麼需要而不是隻調用'tar'過程? – kvm

+0

@kvm它不是必需的,但它更方便(請參閱您已經使用popen的頭痛:)) –

+3

@kvm使用tarfile模塊將使您的代碼變得輕鬆。您編寫的代碼將運行在任何可用python的平臺(機器)上,而不管該機器是否安裝了tar實用程序。 – sateesh

0

鑑於你的信息,我不能見你看到的問題。可能多一點上下文。即確切的腳本不起作用,請。

我構建了一個帶有空文本文件的示例tar歸檔文件。 然後我輸入兩行Python腳本,該文件夾中:

from platform import popen 
popen("tar xvf the_tar.tar") 

我跑它,它給了我:

x sample.txt 

預期。 錯誤必須發生在腳本內部。與 中現在顯示的腳本一樣,當我將os.chdir()參數更改爲適合我的"./"時,它也會在我的mac上運行。

你可以測試它在你的機器上修改爲os.chdir("./")(windows我猜)?

+0

我已將確切的腳本添加到問題 – kvm