如何将字符串以及其他变量传递到 gnome 终端

How to pass a string, as well as other variables, into a gnome-terminal

我正在尝试创建一个 Python 文件,该文件将为 4 个不同的 Discord 机器人启动 Python 脚本。我正在努力弄清楚如何将变量传递给 gnome 终端。

例如:

paths = [
    [
        "Bot 1 Name",
        "Bot 1 Path/Bot1.py"
    ],
    [
        "Bot 2 Name",
        "Bot 2 Path/Bot2.py"
    ]
]

for bot in paths:
    os.system(f"""gnome-terminal -- bash -c 'echo Starting up {bot[0]}; python "{bot[1]}"; exec bash'""")

但是,这不起作用,因为每个机器人的路径都需要用某种形式的引号括起来,否则终端不会将其视为一个参数。
我已经尝试了一堆不同的引号排列方式,以及其他一些方法,但是 none 强制终端意识到 {bot[1]} 的值需要用引号括起来。

理想情况下,终端应接收如下命令:
gnome-terminal -- bash -c "echo Starting up Bot 1; python '~/Bot1.py'; exec bash"
或者功能相同的类似东西。

有什么建议吗?

我不太确定这是不是你想要的。您可以使用 python 格式化字符串函数。

for bot in paths:
   os.system("gnome-terminal -- bash -c \"echo Starting up {}; python '{}'; exec bash\"".format(bot[0], bot[1]))


通过与打印功能一起使用,您将获得与您提到的相同的输出。

for bot in paths:
   print("gnome-terminal -- bash -c \"echo Starting up {}; python '{}'; exec bash\"".format(bot[0], bot[1]))

gnome-terminal -- bash -c "echo Starting up Bot 1 Name; python 'Bot 1 Path/Bot1.py'; exec bash"

gnome-terminal -- bash -c "echo Starting up Bot 2 Name; python 'Bot 2 Path/Bot2.py'; exec bash"