从Python更新proc条目的推荐方法是什么?

时间:2016-11-18 14:44:43

标签: python linux linux-kernel linux-device-driver

我在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

3 个答案:

答案 0 :(得分:4)

您的代码存在一些问题。

首先,您要写入文件,但是您在阅读模式下打开它。

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

我们可以通过利用ifFalse的整数值为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模块。它的函数openwriteclose几乎是C对应函数的直接包装。

更像是C等于惊喜!