Скрипт python, открывающий несколько терминалов, но выполняющий команду только в одном

Я бы хотел, чтобы мой скрипт открывал 3 терминала и выполнял разные команды в каждом, но все, что он делает, это запускает сканирование nmap в исходном терминале и открывает 3 пустых терминала.

import subprocess

TARGET_IP_ADDRESS = "IPHERE"

terminal_windows = []

for i in range(3):

    terminal_windows.append(subprocess.Popen(["gnome-terminal"]))

subprocess.run(["nmap", "-T5", "-A", "-p-", "--min-rate=500", TARGET_IP_ADDRESS], check=True, stdin=terminal_windows[0].stdin)

subprocess.run(["whatweb", TARGET_IP_ADDRESS], check=True, stdin=terminal_windows[1].stdin)

subprocess.run(["gobuster", "dir", "http://" + TARGET_IP_ADDRESS + "/", "--wordlist", "/usr/share/dirb/wordlists/common.txt"], check=True, stdin=terminal_windows[2].stdin)

Вы можете указать команду для запуска в качестве аргумента gnome-terminal; это упростит ваш код до тривиального.

tripleee 22.12.2022 10:03

Запуск команд в отдельных окнах — обычное требование для начинающих, но на самом деле это не масштабируемо. Более универсальным решением является запуск фоновых команд с выводом в файл журнала, который вы затем можете просмотреть или tail -f и т. д. с любого терминала.

tripleee 22.12.2022 10:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы дождетесь завершения сканирования NMAP, запустится команда whatweb, а затем gobuster в том же терминале.

Что вы сделали, так это открыли 3 пустых терминала в цикле for, а затем последовательно выполнили команды терминала в текущем терминале.

Просто выполните 3 вызова подпроцесса.

import subprocess

TARGET_IP_ADDRESS = "IPHERE"
ls_cmd = []
ls_cmd[0] = f"""nmap -TS -A -p- --min-rate=500 {TARGET_IP_ADDRESS}; echo; read -p "Press enter to continue....";"""
ls_cmd[1] = f"""whatweb {TARGET_IP_ADDRESS}; echo; read -p "Press enter to continue....";"""
ls_cmd[2] = f"""gobuster dir http://{TARGET_IP_ADDRESS}/ --wordlist /usr/share/dirb/wordlists/common.txt; echo; read -p "Press enter to continue....";"""

_ = [subprocess.run(f"gnome-terminal -e '{cmd}'", shell=True) for cmd in ls_cmd]

Теперь он открывает 3 отдельных терминала, но они закрываются через 0,5 секунды после открытия.

berxiv 22.12.2022 18:59

хорошо. вы можете добавить паузу с помощью read -p "Press enter to continue...."; позвольте мне отредактировать мой ответ.

mirmo 24.12.2022 12:52

Другие вопросы по теме