Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何临时运行代码作为';根';?_Python_Multiprocessing_Python 2.x_Python Multiprocessing - Fatal编程技术网

Python 如何临时运行代码作为';根';?

Python 如何临时运行代码作为';根';?,python,multiprocessing,python-2.x,python-multiprocessing,Python,Multiprocessing,Python 2.x,Python Multiprocessing,相关的: 我想使用Python的multiprocessing.Pool import multiprocessing as mp pool = mp.Pool(3) for i in range(num_to_run): pool.apply_async(popen_wrapper, args=(i,), callback=log_result) 我犯了错误 File "/usr/local/lib/python2.6/multiprocessing/__init__.py",

相关的:

我想使用Python的multiprocessing.Pool

import multiprocessing as mp
pool =  mp.Pool(3)
for i in range(num_to_run):
    pool.apply_async(popen_wrapper, args=(i,), callback=log_result)
我犯了错误

  File "/usr/local/lib/python2.6/multiprocessing/__init__.py", line 178, in RLock
    return RLock()
  File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 142, in __init__
    SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1)
  File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 49, in __init__
    sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 13] Permission denied
我在相关问题中读到,这是因为没有r/w到/dev/shm

除了更改
/dev/shm
中的权限外,还有什么方法可以在代码中以root用户身份运行

我最初认为您可以执行类似于
os.umask()
的操作,但它没有起作用

编辑(重新表述问题):

  • 假设用户名a具有对目录a的r/w访问权限
  • 您是用户B,您的程序需要访问目录A。如何以用户A的身份运行程序

从最不危险到最危险的顺序

  • 您可以按照John Zwinck的建议尝试删除权限。 基本上,您可以使用根级别的权限启动程序, 立即执行需要执行的操作,然后切换到非根目录 用户

  • 您还可以要求为根用户提供凭据 输入到脚本中,然后仅在需要时使用它们 必需的

    subprocess.call("sudo python RunStuffWithElevatedPrivelages.py")
    #From here, the main script will continue to run without root permissions
    
    或者,如果您不希望脚本提示用户输入密码,您可以这样做

    subprocess.call("echo getRootCredentials() | sudo -S python RunStuffWithElevatedPrivelages.py")
    
  • 或者您可以作为root用户运行整个程序--
    sudopythonmyscript.py


  • 至于只在用户运行您的脚本时才临时向/dev/shm授予root权限,我唯一能想到的是在root用户下的后台运行一些脚本,可以临时向使用您的脚本root权限的任何人授予/dev/shm权限。这可以通过使用setuid授予此类权限来实现,然后在一定时间后,或者如果脚本结束,权限将被取消。我唯一关心的是,是否有一种方法可以让临时获得此类权限的用户获得更持久的权限。

    您不应该尝试让代码以root用户身份运行。解决方案是根据您链接的问题使用root访问永久修复您的系统。@JohnZwinck您能回答问题的编辑部分吗?我只是在想一个与rootrelated(?)无关的案例:@ealeon:涉及的用户是什么并不重要。只需修复
    /dev/shm
    上的权限即可。“我在这里看不到任何负面影响。”约翰温克问题是。。除了修改许可证,还有其他方法吗。你的答案是否定的,对吗?还是有别的办法。。。?
    subprocess.call("echo getRootCredentials() | sudo -S python RunStuffWithElevatedPrivelages.py")