我有python代码,它将下载.war
文件并将其放在由变量path
指定的路径中。
现在我希望将该战争中的特定文件提取到特定文件夹。
但我在这里受到了打击:
os.system(jar -xvf /*how to give the path varible here*/ js/pay.js)
我不确定如何将变量path
传递给os.system
命令。
我是python的新手,请帮助我。
答案 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)