gpt4 book ai didi

python不打印出“字符

转载 作者:行者123 更新时间:2023-12-04 15:21:11 27 4
gpt4 key购买 nike

我有一个奇怪的问题。我需要从 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 的反斜杠转义。

正确的引用看起来像

for file in glob.glob('system1/**', recursive=True):
os.system(f"""stat -c 'set_metadata(/%n "uid", %u, "gid", %g, "mode", 0%a, "capabilities", 0x0, "selabel", "later");' {file}""")

我们使用 Python 的三重引号允许我们将文字单引号和双引号传递给 shell。

当然,更好的解决方案是使用 subprocess,它可以让您完全绕过 shell。

for file in glob.glob('system1/**', recursive=True):
subprocess.run(['stat', '-c',
'set_metadata(/%n "uid", %u, "gid", %g, "mode", 0%a, "capabilities", 0x0, "selabel", "later");',
file], check=True)

但是,如果您的所有实际业务逻辑无论如何都在 shell 脚本中,您为什么还要使用 Python?

#!/bin/bash
stat -c 'set_metadata(/%n "uid", %u, "gid", %g, "mode", 0%a, "capabilities", 0x0, "selabel", "later");\n' system1/**

(如果 glob 返回大量匹配项,您可能需要使用 xargs 将其分解。)

关于python不打印出“字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63299250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com