我在/proc/sys/fs/offs/ts/enable中有一个linux proc条目,它可以在自定义内核模块中切换标志。将值设置为1将启用模块中的模式,设置为0将禁用该模式。

在bash中,要启用该模式,我只需

echo 1 > /proc/sys/fs/offs/ts/enable

并禁用它,
echo 0 > /proc/sys/fs/offs/ts/enable

我有一个用Python 2.7编写的守护程序,它将寻找一些外部事件触发器,当该事件触发时,应启用或禁用内核模块中的功能。守护程序以root特权运行,因此我不应该遇到任何类型的权限问题。

是否有建议的方法来从python设置此值?

例如,说我的函数现在看起来像这样。
def set_mode(enable=True):
    with open('/proc/sys/fs/offs/ts/enable', 'w') as p:
        if enable:
            p.write("1")
        else:
            p.write("0")
        p.flush()

最佳答案

您的代码有两个问题。

首先,您要写入文件,但是要以读取模式打开它。

其次,.write需要字符串数据,而不是整数。

我们可以利用ifFalse分别具有0和1的整数值这一事实来摆脱True测试。下面的代码使用print函数而不是.write,因为print可以将int(enable)返回的整数转换为字符串。同样,print附加一个换行符(除非您通过end参数告诉它不这样做),因此,这种Python代码执行与Bash命令行相同的操作。

def set_mode(enable=True):
    with open('/proc/sys/fs/offs/ts/enable', 'w') as p:
        print(int(enable), file=p)

如果要使用.write进行操作,请将print行更改为:
p.write(str(int(enable)) + '\n')

有一种方法可以一步完成从 bool(boolean) 到字符串的转换:使用 bool(boolean) 将索引到字符串文字中:
'01'[enable]

它简短而快速,但是有人会认为使用 bool(boolean) 值作为索引有点神秘。

08-04 21:22
查看更多