我正在向 PyQt5 应用程序添加功能。这项新功能涉及复制、链接和删除可能位于受保护目录中的文件(和链接),因此类似os.symlink
或shutil.copyfile
会失败的命令。
当然,主应用程序不是以 root 权限运行的(要求用户这样做是不可能的),所以我需要一个解决方法。
首先当然是将关键代码包装在 try/except 块中并调查任何异常。如果事实证明缺少 root 权限是我会在对话框中要求输入密码的问题(大概只要当前对话框处于活动状态就存储密码)。
但我不确定如何使用root 密码重复该步骤。我强烈希望在 Python 域中执行此操作(或者 Qt 是否为文件操作提供了一些支持?我敢打赌它确实提供了,但我找不到它)。我认为应该可以通过在 shell 命令中执行文件操作并以某种方式将密码传递给该命令,但由于 Python 和 PyQt 旨在保护程序员免受操作系统差异的复杂性影响,我宁愿避免使用这种方法。
一些伪代码应该清楚地说明这个问题:
def my_copy(source, dest):
try:
os.path.symlink(source, dest)
except: # check for permission problem:
# use dialog to ask for password
# repeat the symlink procedure with password