Команды Python Execute Shell без открытия терминала

Я пишу сценарий, который должен сфокусировать данное приложение, если оно уже запущено, иначе запустите приложение.

Я использую метод run() модуля subprocess для запуска нескольких команд оболочки, чтобы проверить, запущен ли в данный момент экземпляр, и если нет, то для запуска нового.

Скрипт отлично работает, если выполняется из терминала, однако ничего не делает, если запускать его с помощью сочетания клавиш из Gnome Shell.

Мой вопрос: как выполнить команды оболочки, не открывая терминал?

Вот фрагмент кода, который я использую для команд оболочки:

def focus_instance_of(application):
    # Moves the window to the current desktop, raises it und gives it focus
    print("Put " + application + " in focus...")
    subprocess.run(["wmctrl", "-R", application])

person Treborium    schedule 19.06.2018    source источник
comment
Документацию попробовать? docs.python.org/3.4/library/subprocess.html   -  person William_Wilson    schedule 19.06.2018


Ответы (2)


Это это то, как вы выполняете команды (без необходимости в оболочке) "без открытия терминала".

Если он выполняется правильно из терминала — я полагаю, из командной строки — а не из оболочки Gnome, то, вероятно, какая-то особенность другой среды вызывает его сбой.

Я предлагаю вам перенаправить stdout и stderr в файл журнала, чтобы вы могли начать отлаживать это. Проверьте наличие необработанных исключений. Также проверьте код вывода и возврата выполнения wmctrl, возможно, он сообщает об ошибке.

person Dun Peal    schedule 19.06.2018

Вы можете добавить аргумент ключевого слова shell=True, это создаст оболочку в фоновом режиме для запуска команды (но не откроет окно терминала).

subprocess.run(["wmctrl", "-R", application], shell=True)
person Edward Minnix    schedule 19.06.2018
comment
То, что скрипт корректно работает при запуске из CLI, говорит о том, что проблема не в отсутствии шелла. Более того, нет никаких причин, по которым wmctrl потребовалась бы оболочка. - person Dun Peal; 19.06.2018