Pyinstaller - Как отключить подробное сообщение об исключении traceback? - PullRequest
0 голосов
/ 23 декабря 2018

Чтобы прояснить этот вопрос, я написал следующий скрипт:

#!/usr/bin/python3
import os,sys
import time

try:
    while True:
        user = input("User: ")

        if user == "root":
            os.system("sudo -u root /bin/bash")
        else:
            time.sleep(2)

except:
    print("Exiting...")
    sys.exit(0)

Когда я запускаю этот скрипт, используя только python3, все работает как положено.Там нет подробного сообщения об ошибке (из трассировки), если я, например, Ctrl C из программы (KeyboardInterrupt).Меня интересует только вывод «Exiting ...», поэтому я не указал KeyboardInterrupt, но для любого исключения, которое может произойти.Однако, когда я создаю файл ELF (для Linux), используя pyinstaller (pyinstaller --onefile test.py), я получаю вывод трассировки:

$ dist/test
User: ^CTraceback (most recent call last):
  File "test.py", line 7, in <module>
    test = input("User: ")
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    print("Exiting...")

Также странно, что я не могу воспроизвести это каждый раз при выходе изпрограмма в строке input, однако я могу на 100% воспроизвести вышеупомянутое, когда программа спит в time.sleep(2):

$ dist/test
User: ^CExiting...
$ dist/test
User: ^CExiting...
$ dist/test
User: ^CExiting...
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    test = input("User: ")
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    print("Exiting...")
KeyboardInterrupt
[18825] Failed to execute script test
$ dist/test
User: asd
^CTraceback (most recent call last):
  File "test.py", line 12, in <module>
    time.sleep(2)
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    time.sleep(2)
KeyboardInterrupt
[18833] Failed to execute script test

Есть ли способ сказать pyinstaller, чтобы он не "пропускал" скриптимя (например: File "test.py") и строки фактического кода (например, test = input("User: "))?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...