Files
maigret/pyinstaller/maigret_standalone.py

78 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
import asyncio
import platform
import sys
import maigret
DOUBLE_CLICK_INTRO = """\
Maigret runs from the command line. You can:
- call it from cmd/PowerShell: maigret_standalone.exe USERNAME [options]
- or enter a username below for a default search.
Full options: maigret_standalone.exe --help
Documentation: https://maigret.readthedocs.io/
"""
def _launched_by_double_click() -> bool:
# On Windows, Explorer spawns a fresh console just for our process, so
# GetConsoleProcessList returns 1. When launched from an existing cmd /
# PowerShell session the count is >= 2 (the shell is attached too).
if platform.system() != "Windows":
return False
if len(sys.argv) > 1:
return False
try:
import ctypes
buf = (ctypes.c_uint * 4)()
count = ctypes.windll.kernel32.GetConsoleProcessList(buf, 4)
return count <= 1
except Exception:
return False
def _pause() -> None:
try:
input("\nPress Enter to exit...")
except EOFError:
pass
def _prompt_for_username() -> str:
try:
return input("Username to search: ").strip()
except (EOFError, KeyboardInterrupt):
return ""
def main() -> None:
if not _launched_by_double_click():
asyncio.run(maigret.cli())
return
print(DOUBLE_CLICK_INTRO)
username = _prompt_for_username()
if not username:
print(
"\nNo username entered. Re-run with one, e.g.\n"
" maigret_standalone.exe alice"
)
_pause()
return
# Inject the username so maigret's argparse sees it like a normal CLI run.
sys.argv = [sys.argv[0], username]
try:
asyncio.run(maigret.cli())
finally:
_pause()
if __name__ == "__main__":
main()