sudo -u userX python3弄乱python PYTHONPATH

时间:2018-04-27 07:43:39

标签: python sudo

我有一个shell脚本来启动一些python脚本。我需要使用不同的用户启动python脚本,因此我通过sudo -u userX来检查用户,但不知怎的,这句话混淆了PYTHONPATH。 只启动一个python脚本,但是当我尝试从同一个目录导入脚本时,找不到它们。

shell脚本:

cd $1
sudo -u userX PYTHONPATH=. python3 $2

如您所见,我尝试手动将当前目录添加到PYTHONPATH,但仍然出现相同的错误。

我的python脚本:

import sys
print(sys.path)

from second import calc

#output of the script:
# $ ['', '/var/www/html/assignments_rest/EvaluationServer/sandbox/proc_0/1', ...]
# $ Traceback (most recent call last): File "first.py", line 4, in <module> from second import calc 
# $ ImportError: No module named 'second'

当我在python脚本中添加路径时,它正常工作:

sys.path.append(".")
print(sys.path)

from second import calc

# $ ['', '/var/www/html/assignments_rest/EvaluationServer/sandbox/proc_0/1', ...]
# $ doing stuff no erros

让我感到困惑的是,sys.path接缝是否相同,但导入仅在sys.path.append(".")之后起作用。但是为了我的目的,在python脚本中添加dir本身是没有选择的。所以我必须在启动python脚本之前添加它。

知道如何解决这个问题吗?

修改1:

我正在运行一个服务器,学生可以上传他们的python脚本。执行脚本然后进行评估。出于安全原因,我创建了一个“沙箱”(../sandbox/proc_0/..),我将所有脚本复制到那里,然后用不同的用户userX执行它们如何只有这个目录的读/写/执行者权限而在其他任何地方。我从后端调用的shell脚本(见上文)位于沙箱之外。

用户userX是最小用户,没有home目录或密码。

编辑2: 以下是我直接从shell执行脚本的示例,我将导演更改为../sandbox/proc_0/1/。这个dir的样子如下:

|--first.py
|--second.py

完美运行以下功能:

$ mb@assignments:../sandbox/proc_0/1$ python3 first.py
$ Geben Sie eine Zßhl ein: 3
$ Das Ergebniss ist 2.3 für a = 3

运行相同但更改用户:

$ mb@assignments:../sandbox/proc_0/1$ sudo -u eval python3 first.py
$ Traceback (most recent call last):
$   File "first.py", line 1, in <module>
$     from second import calc
$ ImportError: No module named 'second'

添加PYTHONPATH

$ mb@assignments:../sandbox/proc_0/1$ sudo -u eval PYTHONPATH=/var/www/html/assignments_rest/EvaluationServer/sandbox/proc_0/1 python3 first.py
$ Traceback (most recent call last):
$   File "first.py", line 1, in <module>
$     from second import calc
$ ImportError: No module named 'second'

当我将拖曳线sys.path.append("."); print(sys.path)添加到first.py时,它会在每种情况下都有效。

0 个答案:

没有答案