OSError:[Errno 13] subprocess.check_output拒绝权限

时间:2017-05-24 07:15:45

标签: python

我正在使用文件/sys/class/net/NIC_NAMES/speed来获取文件的输出。 NIC_NAMES 部分不同,因此可能是" eth1"或" eth0"在这里,我从 Current_inf 获得该值,因此Current_inf是一个变量,我希望每次调用以获得 NIC_NAME 值。什么是正确的方法来调用变量来获得输出。

  

通过 subprocess.check_output 调用它时我会进入   低于错误。

>>> import subprocess
>>> import netifaces
>>> import socket
>>> import re
>>>
>>> Current_inf = netifaces.gateways()['default'][netifaces.AF_INET][1]
>>> print Current_inf
eth0
>>> spd = subprocess.check_output('/sys/class/net/%s/speed' % (Current_inf))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/grid/common/pkgs/python/v2.7.10/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/grid/common/pkgs/python/v2.7.10/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/grid/common/pkgs/python/v2.7.10/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 13] Permission denied
  

当我从操作系统直接调用它时:

cat / sys / class / net / eth0 / speed

2000

请指导我如何使用字符串格式,%.format。虽然我使用的是python 2.7.10。

其次作为python的新手,我想了解如何将变量调用到文件配置路径中就像我上面的情况一样,我想调用Current_inf作为变量调用

您的意见将非常有用和赞赏。

1 个答案:

答案 0 :(得分:0)

无需使用subprocess模块来读取普通文件。您可以使用:open('/sys/class/net/%s/speed' % Current_inf).read()