我不能从一个将权限下降到普通用户的脚本的python脚本运行firefox。 如果我写
#sudo python >>>import操作系统 >>> import pwd,grp >>> uid = pwd.getpwnam('norby')[2] >>> gid = grp.getgrnam('norby')[2] >>> os.setegid(gid) >>> os.seteuid(uid) >>>导入webbrowser >>> webbrowser.get('firefox')。open('www.google.it') 真正 >>>#它返回true,但不起作用 >>>从subprocess导入Popen,PIPE >>> p = Popen('firefox www.google.it',shell = True,stdout = PIPE,stderr = PIPE) >>>#不执行命令
我认为这不是一个python的问题,但firefox / iceweasel / debian的configuration问题。 也许firefox只读UID而不是EUID,并且不执行进程,因为UID等于0.您怎么看待?
您必须导出名为DISPLAY的值为':0.0'的环境variables。 这可能会使其工作。 如果你不知道如何使用python导出环境variables,请在stackoverflow上提问。
问题是它无法访问X服务器上的显示器,它正在运行? 我不会推荐使用root权限来运行firefox,这就像在windows上运行IE一样。
你在评论中说,你是在较低的水平上推出它。 错误是因为您在X启动显示之前正在启动较低级别的Firefox。 延迟它的运行,直到X启动。
你真的不应该这样做。 真的 。
你为什么想要?
首先,您通常会想要使用gksu或gksudo或sux来获取X应用程序的root权限。 其次,你为什么要在Debian上使用sudo ? (我的意思是sudo甚至启用了?它不是默认在Debian上,而不是在Ubuntu或OS X.)第三,我想不出任何情况下,你真的需要以root权限运行浏览器。
有些情况下,当你需要一个gui应用程序作为根用户时,比如你想编辑一个系统文件(比如/ etc / network / interfaces ),而且你最适合用gedit编辑。 这不是一个不合理的事情要做。 但是你想用gksu或者类似的工具来转移权限。
我用sux。
描述:将su转换成你的X凭证的包装Sux是标准su命令的一个包装,它将把你的X凭证传送给目标用户。
我猜,你必须指定一个X服务器。 恐怕我不知道如何在Python中实际做到这一点:-)