Как передать строку, а также другие переменные в терминал gnome - PullRequest
2 голосов
/ 29 апреля 2020

Я пытаюсь создать файл Python, который запустит сценарии Python для 4 различных ботов Discord. Я изо всех сил пытаюсь выяснить, как передать переменные в терминал 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'""")

Однако это не работает, так как путь к каждому боту должен быть заключенный в кавычки, иначе терминал не увидит его в качестве одного аргумента. Я испробовал несколько различных вариантов расположения кавычек, а также несколько других методов, но ни один из них не заставляет терминал понимать, что значение {bot[1]} должно быть заключено в кавычки.

В идеале терминал должен получать команду следующим образом: gnome-terminal -- bash -c "echo Starting up Bot 1; python '~/Bot1.py'; exec bash" Или что-то похожее, что работает так же.

Любой совет?

1 Ответ

0 голосов
/ 29 апреля 2020

Я не очень уверен, что ты этого хочешь или нет. Вы можете использовать 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 Запуск имени бота 1; python 'Bot 1 Path / Bot1.py'; exe c bash"

gnome-terminal - bash - c "echo Запуск имени бота 2; python 'Bot 2 Path / Bot2.py'; exe c bash"

...