将一部分代码作为NON-root运行?

时间:2014-02-02 06:24:37

标签: python-2.7 root sudo python-webbrowser

我的程序以root权限运行,但我需要一部分作为非特权用户运行。

基本上,webbrowser.open(SITE)不能以root身份运行。我的代码需要以root身份运行。我尝试了以下内容:

subprocess.call("sudo -u " + getpass.getuser() + " " + webbrowser.open("https://github.com/codywd/WiFiz/issues"))

导致以下错误:

Traceback (most recent call last):
  File "main.py", line 364, in OnReport
    subprocess.call("sudo -u " + getpass.getuser() + " " + webbrowser.open("https://github.com/codywd/WiFiz/issues"))
TypeError: cannot concatenate 'str' and 'bool' objects
START /usr/bin/chromium "https://github.com/codywd/WiFiz/issues"
[7250:7250:0201/231848:ERROR:chrome_browser_main_extra_parts_gtk.cc(50)] Startup refusing to run as root.

我理解为什么会发生此错误,但我不知道如何执行此代码。

先谢谢你们!

1 个答案:

答案 0 :(得分:0)

看起来这里给出的答案是您正在寻找的: Run child processes as different user from a long running process

但是,由于我无法找到直接访问webbrowser.open内部启动的子进程的方法(请参阅http://docs.python.org/2/library/webbrowser.html上的文档),您有两种选择:

  • 从您的代码中删除webbrowser模块,通过浏览器打开浏览器 子进程调用。在此,您可以设置UID和GID位。
  • 在webbrowser周围设置一个包装器(在下面展开)

1)创建一个新的python脚本,从那里开始正常的webbrowser.open。

2)在主程序中创建一个子进程,使用正确的UID + GID,这将调用1)中描述的包装器脚本。