如何将特定war文件提取到特定文件夹

时间:2012-12-10 09:23:56

标签: python jar

我有python代码,它将下载.war文件并将其放在由变量path指定的路径中。

现在我希望将该战争中的特定文件提取到特定文件夹。

但我在这里受到了打击:

os.system(jar -xvf /*how to give the path varible here*/  js/pay.js)

我不确定如何将变量path传递给os.system命令。

我是python的新手,请帮助我。

3 个答案:

答案 0 :(得分:5)

如果您真的想使用os.system,那么shell命令行将作为字符串传递,您可以传递任何所需的字符串。所以:

os.system('jar -xvf "' + pathvariable + '" js/pay.js)

或者您可以使用{}%s格式等

但是,您可能不想使用os.system

首先,如果您想运行其他程序,使用subprocess模块几乎总是更好。例如:

subprocess.check_call(['jar', '-xvf', pathvariable, 'js/pay.js'])

正如您所看到的,您可以传递一个参数列表,而不是试图找出如何将字符串放在一起(并处理转义和引用以及所有混乱)。还有许多其他优点,主要在文档本身中描述。

但是,您可能根本不想运行war工具。正如jimhark所说,WAR file只是一种特殊的JAR file,它只是一种特殊的ZIP file。要创建它们,通常需要使用特定于JAR / WAR的工具(需要验证布局,确保清单是ZIP目录中的第一个条目,处理包签名等),但是要扩展他们,任何ZIP工具都可以。 Python内置了ZIP支持。你想要做的事情可能就是这么简单:

import zipfile
with zipfile.ZipFile(pathvariable, 'r') as zf:
    zf.extract('js/pay.js', destinationpathvariable)

IIRC,你只能在2.7和3.2+的ZipFile声明中直接使用with,所以如果你在2.6或3.1上,你必须间接地这样做: / p>

from contextlib import closing
import zipfile
with closing(zipfile.ZipFile(pathvariable, 'r')) as zf:
    zf.extract('js/pay.js', destinationpathvariable)

或者,如果这只是一个快速和肮脏的脚本,一旦完成就会退出,你就可以逃脱:

import zipfile
zf = zipfile.ZipFile(pathvariable, 'r')
zf.extract('js/pay.js', destinationpathvariable)

但是我尽量使用with语句,因为这是一个好习惯。

答案 1 :(得分:3)

war文件不是zip文件的类型吗? Python支持zipfile(点击文档页面链接)。

答案 2 :(得分:0)

您可以使用os.environ,它包含所有环境变量。 这是一个词典,所以你可以像下面这样使用它:

pypath = os.environ['PYTHONPATH']

现在,如果你的意思是它是一个常见的python变量,就像使用它一样:

var1 = 'pause'
os.system('@echo & %s' % var1)