我在my ($sside, $bside) = sort { $side{$a} <=> $side{$b} } keys %side;
中有一个linux proc条目,它在自定义内核模块中切换一个标志。将值设置为1将启用模块中的模式,设置为0将禁用该模式。
在bash中,为了启用模式,我只需要
/proc/sys/fs/offs/ts/enable
要禁用它,
echo 1 > /proc/sys/fs/offs/ts/enable
我有一个用Python 2.7编写的守护进程,它将寻找一些外部事件触发器,当该事件触发时,应启用或禁用内核模块中的功能。守护进程以root权限运行,因此我不应遇到任何类型的权限问题。
是否有推荐的方法从python中设置此值?
例如,假设我的功能现在看起来像这样。
echo 0 > /proc/sys/fs/offs/ts/enable
答案 0 :(得分:4)
您的代码存在一些问题。
首先,您要写入文件,但是您在阅读模式下打开它。
其次,.write
需要字符串数据,而不是整数。
我们可以通过利用if
和False
的整数值为0&amp;的事实来摆脱True
测试。 1,分别。下面的代码使用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')
有一种方法可以一步完成从布尔到字符串的转换:使用布尔值索引字符串文字:
'01'[enable]
它的简短&amp;很快,但有些人会认为使用布尔值作为指数有点神秘。
答案 1 :(得分:1)
Linux将/ proc文件系统公开为文件,如名称所示。这意味着您将像对待任何其他文件一样对这些文件进行操作。您建议的功能在如何访问/ proc方面基本上是完美的,但PM 2Ring's建议绝对有效。
答案 2 :(得分:-1)
由于它是低级代码,不是为了便携,我会使用os
模块。它的函数open
,write
和close
几乎是C对应函数的直接包装。
更像是C等于惊喜!