Запуск файла .exe, скомпилированного Pyinstaller, не может подавить окно консоли tsharkPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Запуск файла .exe, скомпилированного Pyinstaller, не может подавить окно консоли tshark

Сообщение Anonymous »

В моем проекте Python есть файл main.py, который является входом приложения и использует Tkinter для разработки пользовательского интерфейса. Есть еще несколько файлов .py, которые будут вызываться и запускаться из main.py. Один из файлов .py — этоprocess_pcap.py, который импортирует API Pyshark для вызова tshark для обработки журнала .pcap. Для удобства распространения приложения я использую Pyinstaller для преобразования файла main.py в main.exe.
Когда я запускаю 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()
Как подавить окно консоли tshark в моем случае, описанном выше?

Подробнее здесь: https://stackoverflow.com/questions/790 ... onsole-win
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»