我在/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
需要字符串数据,而不是整数。
我们可以利用if
和False
分别具有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) 值作为索引有点神秘。