友好的misc/utils/convenience库
项目描述
友好的misc/utils/convenience库
概述
runez 是一个方便的 "utils" 库,用于我多次重写的常见操作。
最初的名字是“run ez”(“运行简单”),它听起来像“runes”,给它带来了一些神秘/魔法的一面,这也相对合适(它确实集中了一些召唤魔法,因为您可以通过使用它来节省很多重复的代码)
功能
适用于任何Python版本
纯Python独立库,不引入任何额外依赖
处理大多数边缘情况,并具有友好的错误
可以调用函数而不检查返回代码等(默认中止,并具有友好的错误)
它们也可以通过设置 fatal=False 来调用,在这种情况下,返回值将指示调用是否成功
支持 dryrun 模式(显示将要执行的操作,但不会实际执行)
通过一次调用 runez.log.setup() 执行大多数典型的日志设置
系统地记录操作(主要在调试级别),示例
Running: foo ... Copy foo -> bar Would move foo -> bar (for dryrun)
CaptureOutput 上下文管理器 -> 抓取任何代码段的输出/日志
100% 测试覆盖率
示例
运行程序
import runez # Aborts if "foo" doesn't exist output = runez.run("ls", "foo") # Output can also be ignored runez.run("ls", "foo") # Don't capture output, just run the command and let output "pass through" runez.run("ls", "foo", stdout=None, stderr=None) # Don't abort, return False on failure (or actual output when successful) output = runez.run("ls", "foo", fatal=False)
文件操作
import runez runez.touch("foo") runez.copy("foo", "bar") runez.move("foo", "baz") runez.delete("foo") runez.write("foo", "bar\nbaz\n") content = "\n".join(runez.readlines("foo", first=10)) full_path = runez.resolved_path("foo/bar") folder = runez.parent_folder(full_path) runez.ensure_folder(folder) with runez.Anchored(folder): assert runez.short(full_path) == "bar"
安装
如常,可在 pypi 上找到:pip install runez
理念
runez 试图在函数间提供一致的接口。以下是涉及 I/O(如写入、读取、复制文件等)功能的函数的主要原则
所有不返回内容的 IO 相关函数(如 run()、delete() 等)具有以下共同签名:fatal=True, logger=UNSET, dryrun=UNSET
fatal:决定操作在失败时是否应引发异常
fatal=True(默认值):在失败时引发异常,记录有意义的错误
fatal=False:在失败时不引发异常,记录有意义的错误
fatal=None:在失败时不引发异常,也不记录任何内容
在非致命模式下,调用尝试返回一个适合该调用的可用的值(请参阅每个函数的文档字符串)
logger:决定操作应该有多详细
LOG.error() 用于失败,除非 fatal 不是 True 并且提供的 logger 是可调用的
logger=UNSET(默认值)
LOG.debug("Running: ...") 以跟踪活动
print("Would run: ...") 在 dryrun 模式下
logger=False:仅记录错误(内部使用,避免在操作调用另一个操作时产生不必要的日志杂音)
logger=mylogger:调用提供的 mylogger() 以跟踪活动(例如:logger=MY_LOGGER.info)
mylogger("Running: ...") 以跟踪活动
mylogger("Would run: ...") 在 dryrun 模式下
logger=None:不记录任何内容(甚至错误)
dryrun 允许为该调用仅覆盖当前的 runez.DRYRUN 设置
所有返回内容的 IO 相关函数(如 read_json()、readlines() 等)使用基于 default=UNSET 的更简单的约定,它决定操作在失败时是否应引发异常
当 default 未提供时,函数调用将在失败时通过异常终止,并通过 LOG.error() 记录有意义的错误
当 default 提供(即使是 None)时,函数调用将不会终止,而是返回指定的 default,在这种情况下,调用者需要自己记录任何内容(在这种情况下,runez 不会产生任何日志杂音)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。