gpt4 book ai didi

python - 在 python 中转义 bash 命令的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 03:17:07 25 4
gpt4 key购买 nike

我有一个函数将命令作为字符串接收,并使用 aws 二进制文件在 AWS 容器上运行它。

该命令在用户请求运行的命令之前和之后添加了一些额外的符号 - 我不会解释为什么。

def run_command_on_aws_container(command: str, aws_info):
full_command = f"bash -c 'echo -n \"|\"; {command}; echo -n \"|\"'"

subprocess.run(["aws", ..., "--command", full_command], ...)
...

command_to_run_on_aws_machine = 'python -c "for i in range(10): print(i)"'

run_command_on_aws_container(command_to_run_on_aws_machine, aws_info)

这有效,但前提是我的 command_to_run_on_aws_machine 不包含单引号。例如,如果我的 command_to_run_on_aws_machine 是这样的:

command_to_run_on_aws_machine = "python -c 'for i in range(10): print(i)'"

这是完全相同的命令,但使用单引号而不是双引号,整个过程崩溃了。或者至少它没有达到您的预期。

有没有办法让我的 run_command_on_aws_container 函数与两个字符串一起工作,这样只要 command arg 是正确的 bash 命令,它就会运行?理想情况下,不仅仅是盲目地将字符串中的所有单引号转换为双引号,而是在某种程度上,如果命令包含正确转义的引号,它仍然有效?

注意:作为 command arg 发送到 run_command_on_aws_container 的所有命令都被硬编码到程序中。在远程系统上执行任意命令不存在安全问题。这只是为了方便,因此在函数外部编写的代码无需担心如何正确使用字符串。

最佳答案

shlex.quote() 专门为此设计:

full_command = "bash -c " + shlex.quote(f'echo -n "|"; {command}; echo -n "|"')

关于python - 在 python 中转义 bash 命令的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74308630/

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