如何使用 Python APT 将特定的配置文件标记为覆盖?

How can I mark a specific conffile for overwriting using Python APT?

我正在使用 Python APT wrapper library 编写交互式 APT 界面。我想处理 APT 在 apt-upgrade.

期间提示是否覆盖或保留配置文件的情况

这对应于命令行 APT 中的以下用户交互:

Configuration file '/var/usr/myconf.cfg'
 ==> File on system created by you or by a script.
 ==> File also in package provided by package maintainer.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** myconf.cfg (Y/I/N/O/D/Z) [default=N] ? Y
Installing new version of config file var/usr/myconf.cfg ...
Status change

我发现apt.progress.base.InstallProgress有一个回调函数conffile,当APT提示是否覆盖时调用。

它具有以下签名:

def conffile(self, current, new):
    """(Abstract) Called when a conffile question from dpkg is detected."""

参数currentnew是涉及的两个文件路径。我如何使用 Python APT 以编程方式将配置文件标记为覆盖或保留?

Python APT 库似乎没有提供任何解决方法。我最终将 Dpkg::Options { "–force-confnew"; } 写入 /etc/apt/apt.conf.d/local,它总是用新的 conf 文件覆盖旧的 conf 文件;我无法花时间扩展库。

获得更多用户交互的一种可能解决方案是使用 apt 命令执行手动干 运行 并从控制台输出解析所有配置文件冲突。然后可以提示用户为所有 conf 文件提供解决方案并编写 /etc/apt/apt.conf.d/local 适当地 + 从 Python APT 库调用升级。

更新:answerSeeker 找到了一种以编程方式设置这些选项的方法 - 请参阅