【问题标题】:Change ownership and permission without terminal - Python在没有终端的情况下更改所有权和权限 - Python
【发布时间】:2016-11-04 17:18:04
【问题描述】:

我有一个在林间空地制作的 gui,但被困在一件事上。

我有一个更改所有权和权限的按钮;除了 root 拥有的文件夹和文件之外,它工作正常。

是否有调用 root 权限来运行此命令而无需在终端中输入 root 密码的方法?即在脚本中预定义它或激活密码的弹出提示并隐含它。

以下代码示例:

def on_button_clicked(self, widget):
    path = {defined from combobox}
    os.chdir(path)

    uid = os.getuid()
    gid = os.getgid()

    for root, dirs, files in os.walk(path):
        for d in dirs:
            os.chown(os.path.join(root, d), uid, gid)
            os.chmod(os.path.join(root, d), 0o755)
        for f in files:
            os.chown(os.path.join(root, f), uid, gid)
            os.chmod(os.path.join(root, f), 0o755)

【问题讨论】:

  • 有什么理由只以 root 身份运行脚本对您不起作用?您的“终端无密码输入”要求对我来说有点不清楚。你的意思是你永远不想输入它永远,或者你只是不希望脚本被提示输入密码而中断?
  • 我猜你可以使用Envoy
  • 原因,@skrrgwasme,是脚本在 gui 中运行良好,如果我使用 os.system('sudo chown .....') 命令,它看起来好像发生了崩溃,实际上它正在等待用户输入 root 密码。
  • 感谢@intrepidhero,这正是我所需要的。

标签: python linux glade


【解决方案1】:

奖品是@intepidhero 提供了一些有用的链接;第一个成功了!

您所要做的就是确保您的用户/组位于 sudoers 中,并将以下代码放在脚本的头部,然后嘿 presto ...您正在运行提升到 sudo 的应用程序!

import os
import sys

euid = os.geteuid()
if euid != 0:
    print "Script not started as root. Running sudo.."
    args = ['sudo', sys.executable] + sys.argv + [os.environ]
    # the next line replaces the currently-running process with the sudo
    os.execlpe('sudo', *args)

print 'Running. Your euid is', euid

【讨论】:

  • 无需在答案中加上 [已解决]。只需单击投票箭头下方的空心复选标记即可。这将accept 答案作为解决方案。
猜你喜欢
  • 2014-08-22
  • 2011-09-04
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多