我需要格式化命令行,其中一些参数来自简单变量,其他参数是较长表达式的结果。 Python f 字符串非常适合变量,我使用 printf 样式
%s
并在字符串外部提供长表达式,因为如果内联放置,它只会使命令模板变得过于混乱:
run(f"""zstd -dc {diff_file} |
git apply -p2 {exclude_args} --directory='%s'""" % (os.getcwd() + "/output"))
我没有将目录参数存储在命名变量中,因为它只使用一次,而不是
diff_file
和exclude_args
。
是否有更干净的方法来避免将
os.getcwd() + "/output"
直接放入 f 字符串中,并避免混合旧的 printf %s
语法和新的 f 字符串?
除了让阅读代码的人有点困惑之外,像上面那样做还有什么缺点吗?
来自文档
格式化字符串文字(也简称为 f 字符串)允许您通过在字符串中添加 f 或 F 前缀并将表达式编写为 {表达式},将 Python 表达式的值包含在字符串中。
所以
run(f"""zstd -dc {diff_file} |
git apply -p2 {exclude_args} --directory='{os.getcwd()}/output'""")
根本不要使用字符串格式。
from pathlib import Path
from subprocess import Popen, PIPE, run
p = Popen(["zstd", "-dc", diff_file], stdout=PIPE)
run(["git", "apply", "-p2", *exclude_args, "--directory", Path.cwd() / "output"], stdin=p.stdout)