我有个奇怪的问题。我需要从stat
命令打印出一个输出字符串
我已经编写了获取一些信息的代码
import glob
import os
for file in glob.glob('system1/**', recursive=True):
os.system("stat -c \"set_metadata(/%n \"uid\", %u, \"gid\", %g, \"mode\", 0%a, \"capabilities\", 0x0, \"selabel\", \"later\");\" "f"{file}")
预期产出:
set_metadata("/system1/xbin/jack_transport" "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "later");
但我的输出如下所示:
set_metadata(/system1/xbin/jack_transport uid, 0, gid, 2000, mode, 0755, capabilities, 0x0, selabel, later);
它没有在那里打印一个"
。为什么会这样?我试着用“替换”来代替,但这不是我所需要的
os.system()
调用shell,它在Python已经完成的基础上进行自己的报价处理。您可以从Python和shell中反斜杠转义引号,但它很快就会变得复杂,因为您也必须从Python中反斜杠转义用于shell的反斜杠转义适当的引用看起来像
在这里,我们使用Python的三重引号将文本单引号和双引号传递给shell
当然,更好的解决方案是使用
subprocess
,它允许您完全绕过shell但是,如果所有实际的业务逻辑都在shell脚本中,那么为什么要使用Python呢
(如果glob返回大量匹配项,则可能需要使用
xargs
将其分解。)相关问题 更多 >
编程相关推荐