从 Python 更新 proc 条目的推荐方法是什么
What is the recommended way to update a proc entry from Python
我在 /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()
因为它是低级代码,不打算移植,我会使用 os
模块。它的函数 open
、write
和 close
几乎是 C 对应函数的直接包装。
越像 C 就意味着越不惊喜!
Linux 公开 /proc 文件系统,如名称所示,files。这意味着您将像处理任何其他文件一样处理这些文件。关于如何访问 /proc,您建议的功能基本上是完美的,但是 建议绝对有效。
您的代码有几个问题。
首先,您想写入文件,但您正在以读取模式打开它。
其次,.write
需要字符串数据,而不是整数。
我们可以利用 False
和 True
分别具有整数值 0 和 1 的事实来摆脱 if
测试。下面的代码使用 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]
它又短又快,但有些人会认为使用布尔值作为索引有点神秘。
我在 /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()
因为它是低级代码,不打算移植,我会使用 os
模块。它的函数 open
、write
和 close
几乎是 C 对应函数的直接包装。
越像 C 就意味着越不惊喜!
Linux 公开 /proc 文件系统,如名称所示,files。这意味着您将像处理任何其他文件一样处理这些文件。关于如何访问 /proc,您建议的功能基本上是完美的,但是
您的代码有几个问题。
首先,您想写入文件,但您正在以读取模式打开它。
其次,.write
需要字符串数据,而不是整数。
我们可以利用 False
和 True
分别具有整数值 0 和 1 的事实来摆脱 if
测试。下面的代码使用 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]
它又短又快,但有些人会认为使用布尔值作为索引有点神秘。