Когда я запускаю main.exe, чтобы открыть пользовательский интерфейс приложения, а затем выбираю выполнение процесса_pcap ( через вызов класса PCAP, определенного в файлеprocess_pcap.py), появляется окно консоли «tshark». Это не то, чего я хочу. Я хочу, чтобы окно консоли tshark не появлялось.
Но когда я напрямую запускаю python main.py для выполнения процесса_pcap, окно консоли tshark не появляется.< /p>
Я пробовал несколько способов отключить окно консоли tshark, но ни один из них не работает.
- Я пробовал команды ниже, чтобы преобразовать main.py в main.exe. Но он не смог скрыть окно консоли tshark.
Код: Выделить всё
pyinstaller --onefile --windowed main.py
pyinstaller --onefile --noconsole main.py
- Я также пытался изменить subprocess.Popen и subprocess.check_output вprocess_pcap.py, но он не смог подавить консоль tshark. либо окно.
Код: Выделить всё
import pyshark
import subprocess
import sys
class PCAP:
def __init__(self, pcap_file, redirector_stdout):
self.pcap_file = pcap_file
self.redirector_stdout = redirector_stdout
self.suppress_console_window()
def suppress_console_window(self):
if sys.platform.startswith('win'):
# Save the original subprocess.Popen and subprocess.check_output
original_popen = subprocess.Popen
original_check_output = subprocess.check_output
# Define a new Popen that suppresses the console window
def new_popen(*args, **kwargs):
if 'startupinfo' not in kwargs:
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
kwargs['startupinfo'] = startupinfo
# Add CREATE_NO_WINDOW as well for extra suppression
if 'creationflags' not in kwargs:
kwargs['creationflags'] = subprocess.CREATE_NO_WINDOW
kwargs['shell'] = True # Ensure shell execution
return original_popen(*args, **kwargs)
# Define a new check_output that suppresses the console window
def new_check_output(*args, **kwargs):
if 'startupinfo' not in kwargs:
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
kwargs['startupinfo'] = startupinfo
if 'creationflags' not in kwargs:
kwargs['creationflags'] = subprocess.CREATE_NO_WINDOW
kwargs['shell'] = True
return original_check_output(*args, **kwargs)
# Override subprocess.Popen and subprocess.check_output with the new versions
subprocess.Popen = new_popen
subprocess.check_output = new_check_output
def execute_code(self):
# Process the pcap file using Pyshark without showing the tshark console
cap = pyshark.FileCapture(self.pcap_file, display_filter='sip')
for packet in cap:
self.redirector_stdout.write(f"packet = {packet}\n")
if 'sip' in packet:
sip_layer = packet['sip']
self.redirector_stdout.write(f"sip_layer = {sip_layer}\n")
if __name__ == "__main__":
# Example usage when running this script directly
pcap = PCAP('sample.pcap', sys.stdout)
pcap.execute_code()
Подробнее здесь: https://stackoverflow.com/questions/790 ... onsole-win