我有python代码,它将下载.war文件并将其放在由变量指定的路径中path.
现在我希望将该战争中的特定文件提取到特定文件夹.
但是我在这里受到了打击:
os.system(jar -xvf /*how to give the path varible here*/ js/pay.js)
Run Code Online (Sandbox Code Playgroud)
我不知道如何将变量传递path给os.system命令.
我是python的新手,请帮助我.
如果您真的想要使用os.system,shell命令行将作为字符串传递,您可以传递任何所需的字符串.所以:
os.system('jar -xvf "' + pathvariable + '" js/pay.js)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用{}或%s格式化等
但是,您可能不想使用os.system.
首先,如果你想运行其他程序,使用该subprocess模块几乎总是更好.例如:
subprocess.check_call(['jar', '-xvf', pathvariable, 'js/pay.js'])
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您可以传递一个参数列表,而不是试图找出如何将字符串放在一起(并处理转义和引用以及所有混乱).还有许多其他优点,主要在文档本身中描述.
但是,您可能根本不想运行该war工具.正如jimhark所说,WAR文件只是一种特殊的JAR文件,它只是一种特殊的ZIP文件.要创建它们,通常需要使用特定于JAR/WAR的工具(需要验证布局,确保清单是ZIP目录中的第一个条目,处理包签名等),但是要扩展他们,任何ZIP工具都可以.Python内置了ZIP支持.你想要做的事情可能就像这样简单:
import zipfile
with zipfile.ZipFile(pathvariable, 'r') as zf:
zf.extract('js/pay.js', destinationpathvariable)
Run Code Online (Sandbox Code Playgroud)
IIRC,你只能在2.7和3.2+ ZipFile的with声明中直接使用,所以如果你在2.6或3.1上,你必须间接地做:
from contextlib import closing
import zipfile
with closing(zipfile.ZipFile(pathvariable, 'r')) as zf:
zf.extract('js/pay.js', destinationpathvariable)
Run Code Online (Sandbox Code Playgroud)
或者,如果这只是一个快速而肮脏的脚本,一旦完成就会退出,您可以逃脱:
import zipfile
zf = zipfile.ZipFile(pathvariable, 'r')
zf.extract('js/pay.js', destinationpathvariable)
Run Code Online (Sandbox Code Playgroud)
但我尽量使用with语句,因为这是一个很好的习惯.
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |