subprocess是否继承Python的Linux功能?

2024-10-04 01:36:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个程序通过子进程模块发出一个tc命令,但是tc正在输出RTNETLINK answers: Operation not permitted

为了解决这个问题,我给了python带有epi标志的CAP_NET_ADMIN功能,但是我仍然不能发出tc命令。你知道吗

$ getcap /usr/bin/python3.5
$ /usr/bin/python3.5 test-capabilities.py 
CompletedProcess(args=['tc', 'qdisc', 'add', 'dev', 'eth0', 'root', 'pfifo'], returncode=2, stdout=b'', stderr=b'RTNETLINK answers: Operation not permitted\n')
$ sudo setcap cap_net_admin+eip /usr/bin/python3.5 
$ /usr/bin/python3.5 test-capabilities.py 
CompletedProcess(args=['tc', 'qdisc', 'add', 'dev', 'eth0', 'root', 'pfifo'], returncode=2, stdout=b'', stderr=b'RTNETLINK answers: Operation not permitted\n')
$ sudo /usr/bin/python3.5 test-capabilities.py 
CompletedProcess(args=['tc', 'qdisc', 'add', 'dev', 'eth0', 'root', 'pfifo'], returncode=2, stdout=b'', stderr=b'RTNETLINK answers: File exists\n')

如果CAP_NET_ADMIN允许进程修改网络接口,并且setcap中给出的+i标志指示子进程应该继承给可执行文件的功能,那么为什么我仍然得到操作不允许的错误呢。我希望得到文件exists错误,就像我在上面通过sudo运行python时所做的那样。你知道吗


Tags: pytestbin进程usrnotargsoperation