UNAR和UNAR之间的向后兼容性

unrar_wrapper的Python项目详细描述


#UNRAR包装

[![构建状态](https://travis-ci.org/opensuse/unrr_wrapper.svg?branch=master)(https://travis ci.org/opensuse/unrar u wrapper)


wrapper
[unrr](https://www.rarlab.com)是用于提取rar文件存档的免费命令行应用程序。不幸的是,这部分软件是非免费的,因此在许多发行版中,它正被lgpl[the unarchiver(unar/lsar)](https://theunarchiver.com/command-line)取代。

它支持基本相同的格式(除了uue和jar以及对arj(无多部分)和ace(不支持ace 2.0)的有限支持),并且它还支持rar5。

不幸的是,unrar和unarchiver根本不兼容cli,它们有一组不同的选项。unrar支持相当大的一组选项(有时相当模糊和不必要),而unarchiver只支持相对较小的一个子集。unarchiver还在"unar"(解包)和"lsar"(列表和测试)实用程序之间分发此功能。




由于此包装器的主要目的是保持基本的向后兼容性,因此仅支持基本的命令和选项。


存档[文件]…`

`lsar[选项]…存档…`

正如您所看到的,即使是无标题和无标题的概要也是不同的。包装器只支持extract(`x`)命令,因此支持unrr概要。对于list(`l`)和test(`t`)命令,它既不支持'files`,`@listfiles`或者` path_-to_extract/` as unarchiver不提供这个功能。




` `[文件…]` `[文件]`直接;
`[@listfiles…]` ` ` ` ` ` ` ` ` ` ` ` ` ` `_to_extract/]` `unar-输出目录` direct





35 r` direct

unrr命令"e"提取没有存档路径的文件。Unarchiver不支持此行为,因此需要使用此包装器对其进行模拟。不幸的是,这将是一个相当复杂的功能,例如,由于文件冲突出现时的交互性,因此它没有在此包装器中实现。


` l[t[a],b]`用于存档的列表`[技术性的[全部],裸的]`和'v[t[a],b]`用于存档的详细列表。实际上,它意味着以下组合:`L`,`LT`,`LTA`,`LB`(对于'V'选项,反之亦然)。但是,"lsar"只支持基本列表和选项"l"和"l"以打印存档文件中每个文件的更多/所有信息。

根据我的测试,"l"和"v"命令的输出没有区别,除了普通的"unrar l"和"unrar v",其中"unrar v"添加"packed"和`列与输出的比率。由于此包装器的目的不是精确模拟输出,因此使用了以下简化的投影:

` vta `` lsar-l `




UNAR命令wrapper implementation
------
`p`不受支持未实现

unrr的"p"命令只是将文件打印到stdout。UNAR不支持此命令,由于我认为此命令不重要,因此我没有实现它。


对其他选项的模拟超出了此包装器的范围。



unar-opt unar/lsar-opt wrapp实现

`-o+` ` unar force overwrite ` ` unar force-overwrwrite ` direct
`-o-` ` ` unar-force-rename ` ` unar-force-force-重命名` direct
`-p-p ` ` `-p

对于unrr,所有这些选项都可以与所有命令一起使用,即使没有任何意义。在这种情况下,它只是被忽略了(例如,当您将"-o+"与"l"命令一起使用时)。基于"unar"中支持的内容,我决定只支持extract命令的这些选项,除了所有命令都支持的"-p"。

但是,如果有多个顶级文件或文件夹,则默认情况下unar创建一个包含目录。因此,我们需要使用`-d,-no directory`unar选项作为默认值。此选项意味着永远不要为解压缩的存档文件的内容创建额外的包含目录。


\但是,unarchiver只使用两个基本的返回代码-0(成功)和1(错误)。由于无法将返回代码1转换为任何其他更具体的错误描述,此包装仅支持这两种代码,并添加了表示包装参数错误的代码2。

单元测试测试特定python函数的基本功能。功能测试在真正的rar存档(位于"tests/testdata"目录中)上执行测试。

如果要运行单元测试,请从主目录运行"python3-m unit test tests.test_unrar_wrapper"。

如果要运行功能测试,请运行`./tests/functional_tests.shtests/testdata/functional/unrar_wrapper.py`从主目录。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
apache commons 3.1中的java httpClient代理支持   ubuntu 14.04 Java:找不到类Xmx1g   java如何用当前用户的数据填充recyclerview?   java Alter Hibernate事务超时仅用于一种方法?   如果没有pow()、函数或递归,如何在c/c++中使用幂函数   java将html UI与本机安卓应用程序相结合   创建GridPane子项时发生java错误   java在基类构造函数中调用虚方法   客户端重新连接javasocket   具有建议日期的java Open DatePicker   雅加达ee Java ee请求范围和异步   classnotfoundexception无法执行目标组织。科德豪斯。项目<projectname>上的mojo:execmavenplugin:1.6.0:java(defaultcli):   java字符串内容相同,但equals方法返回false   primefaces调度的java问题   java帮助我理解关于实现接口的这一课   java Jsoup在下载页面文本时将所有url分离   java将字符串转换为整数错误   java如何从mapDB数据库中检索数据,而不必每次都重写它?