Запустите два сценария оболочки sudo в двух разных терминалах из python3 - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть встроенная система, в которой я запускаю живой код. Каждый раз, когда я хочу запустить код, я запускаю два скрипта в двух разных терминалах: «run1.sh» и «run2.sh». Я могу видеть вывод этих скриптов в своих терминалах (я тоже хочу).

Теперь я хочу сделать скрипт на python, который запускает эти два скрипта в двух разных терминалах. Я хочу все еще видеть их вывод. Также я хочу вставить пароль из скрипта python в терминалы, так как скрипты работают в режиме sudo. Я много играл с supbrocess и PIPES, но я никогда не выполнял все вышеперечисленные требования одновременно. Как эти требования могут быть выполнены?

Я использую Ubuntu кстати (поэтому у меня есть терминал gnome)

Обновление: я, вероятно, не ясно в своем вопросе, но это должно быть внутри скрипта Python. Это не для моего удобства, это часть процесса интеграции. Код скрипта будет частью большой программы на Python, поэтому весь вопрос в том, как мне это сделать на Python.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Основываясь на добавленной вами новой информации, я создал небольшой скрипт на python, который будет запускать два терминала и выводить их отдельно:

enter image description here

Основной скрипт:

mortiz@florida:~/Documents/projects/python/split_python_execution$ cat split_pythonstuff.py 
#!/usr/bin/python3
import subprocess

subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script1.py'])
subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script2.py'])

Скрипт 1:

mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script1.py 
#!/usr/bin/python3

while True :
   print ('script 1')

Скрипт 2:

mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script2.py 
#!/usr/bin/python3

while True:

    print ('script 2')

Отсюда, я думаю, вы можете разрабатывать все, что захотите.

ОБНОВЛЕНИЕ: О sudo

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

Если вы добавите эту строку в / etc / sudoers, вам не понадобится пароль, когда вы передаете sudo своей команде:

<YOUR_USER> ALL = NOPASSWD : /usr/bin/python <SCRIPT.py>

На ваш вопрос, насколько я понимаю, у вас есть пароль, хранящийся внутри скрипта.Там нет необходимости делать это, и это плохая практика.Sudoers было бы лучше.

В любом случае, если вы хотите сделать это небезопасным способом, тогда обратитесь к этому вопросу и поместите его перед командами в сценариях, представленных в этомответ.

Работает по ссылке:

echo -e "mypassword\n" | sudo -S python test.py
15

Вам нужно только реализовать это в предыдущем коде.

0 голосов
/ 17 сентября 2018

Вы можете установить Terminator и настроить один профиль на терминал для запуска любого скрипта.

У меня есть шаблон по умолчанию, который загружает 3 терминала и запускает 3 разные команды / или сценарии, если вы хотите:

enter image description here

Когда я загружаю этот профиль, первый переместит меня в каталог моих проектов и выведет их список. Следующий запустит df -h, чтобы увидеть доступное пространство и нижнюю конфигурацию моего ip.

Этот способ избавит вас от большого количества программирования, и это довольно просто.

ОБНОВЛЕНИЕ: Он будет запускать любые команды, bash, zsh, python и т. Д., Доступные для вашего терминала. Если скрипт находится локально на вашем компьютере:

python <your_script_1> # first terminal profile
python <your_script_2> # second terminal profile

оба будут выполнены "одновременно".

Если ваши сценарии являются удаленными на целевой машине, просто создайте сценарий bash, используя ssh для подключения к удаленной машине с закрытым ключом, а затем запустите сценарий, результат будет одинаковым в обоих сценариях.

РЕДАКТИРОВАТЬ: Лучше всего настроить цвета и прозрачность для каждого терминала, чтобы вы могли наслаждаться селфи пингвина во время работы.

...