我正在调用这段代码,但它在我运行 python 脚本的控制台中产生了一些输出(由于 tee 命令):
os.system("echo 3 | sudo tee /proc/sys/vm/drop_caches")
这个版本不产生控制台输出,但还有另一种方法吗?
os.system('sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"')
原文由 ArekBulski 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在调用这段代码,但它在我运行 python 脚本的控制台中产生了一些输出(由于 tee 命令):
os.system("echo 3 | sudo tee /proc/sys/vm/drop_caches")
这个版本不产生控制台输出,但还有另一种方法吗?
os.system('sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"')
原文由 ArekBulski 发布,翻译遵循 CC BY-SA 4.0 许可协议
直接写入 proc 伪文件,而不是通过 Python i/o lib。
这将要求您的脚本以 root 身份运行(通过 sudo
),这意味着您应该将其范围限制为仅限管理员的工具。这也允许脚本在 sudo
需要密码的盒子上运行。
例子:
with open("/proc/sys/vm/drop_caches", "w") as drop_caches:
drop_caches.write("3")
原文由 Alastair McCormack 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
以最 通用 的形式根据标题回答问题:
要 抑制来自
os.system()
的 所有 输出, 请将>/dev/null 2>&1
附加到 shell 命令,这将使 stdout 和 stderr 静音;例如:请注意,
os.system()
通过设计将调用进程的 stdout 和 stderr 流的输出 传递 到控制台(终端)——您的 Python 代码永远看不到它们。此外,
os.system()
如果 shell 命令失败,则 不会 引发异常,而是返回退出代码;请注意,提取 shell 命令的真正退出代码需要额外的工作:您需要通过应用>> 8
从返回的 16 位值中提取高字节(尽管您可以依赖除0
暗示错误情况)。鉴于
os.system()
的上述限制, 通常值得使用subprocess
模块中的功能:例如,
subprocess.check_output()
可以按如下方式使用:以上将:
stderr=subprocess.STDOUT
作为附加参数传递也会捕获 stderr。注意: Python 3.5 引入了
subprocess.run()
,它是os.system()
和subprocess.check_output()
的更灵活的继任者 --- 参见 https://on.orgs.py . subprocess.html#using-the-subprocess-module笔记:
tee
的原因 - 尽管对标准输出输出不感兴趣 - 是天真的尝试使用> ...
而不是在sudo
之前 被解释---
被调用,因此失败,因为尚未授予写入/proc/sys/...
所需的权限。os.system()
还是subprocess
函数, stdin 默认情况下不受影响,因此如果您从终端调用脚本,您将获得交互式密码提示当遇到sudo
命令时(除非凭证已被缓存)。