我的程序以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.
我理解为什么会发生此错误,但我不知道如何执行此代码。
先谢谢你们!
答案 0 :(得分:0)
看起来这里给出的答案是您正在寻找的: Run child processes as different user from a long running process
但是,由于我无法找到直接访问webbrowser.open内部启动的子进程的方法(请参阅http://docs.python.org/2/library/webbrowser.html上的文档),您有两种选择:
1)创建一个新的python脚本,从那里开始正常的webbrowser.open。
2)在主程序中创建一个子进程,使用正确的UID + GID,这将调用1)中描述的包装器脚本。