2011-07-25 153 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