Как проверить аргументы cmdline (argv) в приложении TUI, работающем на терминале pyte в дочернем процессеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как проверить аргументы cmdline (argv) в приложении TUI, работающем на терминале pyte в дочернем процессе

Сообщение Anonymous »

У меня есть TUI-приложение на основе проклятий, которое я запускаю следующим образом:

Код: Выделить всё

def parse_arguments():
parser = argparse.ArgumentParser(description='Command Line Arguments',
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('-c', '--config', type=str, help='Config file path', default=None)
return parser.parse_args()

if __name__ == "__main__":
# === Command line arguments ===
args = parse_arguments()
if args.config:
CONFIG_PATH = args.config

def init_path(stdscr: curses.window) -> Paths:
global interrupted
# initialize some things here
if initui.interrupted:
interrupted = True
try:
curses.wrapper(init_path)
if not interrupted:
curses.wrapper(main, logger=app_logger)

def main(stdscr: curses.window, logger: Optional[logging.Logger] = None):
# more setup and initialization
if logger:
logger.info("Starting up the application")
ui.ui_loop()
Я могу протестировать пользовательский интерфейс с помощью pyte, используя некоторый код, на который я ссылался из https://mrossinek.gitlab.io/programming ... in-python/ :

Код: Выделить всё

def run_tui_test(screen_file_path, keystrokes, W=80, H=24):
# Child process initializes the TUI while parent process sets up virtual screen
pid, f_d = os.forkpty()
if pid == 0:
interrupted = False

def init_path(stdscr: curses.window):
global interrupted
# initialize some things here
if initui.interrupted:
interrupted = True

curses.wrapper(init_path)
if not interrupted:
curses.wrapper(main, logger=None)
else:
screen = pyte.Screen(W, H)
stream = pyte.ByteStream(screen)

# Send keystrokes to TUI
for keystroke in keystrokes:
# print(f"Sending key: {repr(keystroke)} | Encoded: {keystroke.encode()}")
os.write(f_d, keystroke.encode())

# Scrape pseudo-terminal's screen
while True:
try:
[f_d], _, _ = select.select([f_d], [], [], 1)
except (KeyboardInterrupt, ValueError):
break
else:
try:
# Scrape screen of child process
data = os.read(f_d, 1024)
stream.feed(data)
except OSError:
break

# Read expected lines from file
with open(screen_file_path, 'r') as file:
expected_lines = file.read().split('\n')

# Compare expected lines with screen.display
for i, (expected_line, screen_line) in enumerate(zip(expected_lines, screen.display)):
screen_line_str = ''.join(screen_line)
assert expected_line == screen_line_str, f"Line {i+1} does not match: expected '{expected_line}', got '{screen_line_str}'"
Все это работает хорошо, но... есть ли способ передать аргументы (например, --config) при тестировании TUI?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • При установке cmdline-tools для флаттера в Ubuntu получите KeyError: ('cmdline-tools', 'latest')
    Anonymous » » в форуме Android
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Изменения argv не отражаются в /proc/pid/cmdline
    Anonymous » » в форуме Linux
    0 Ответы
    91 Просмотры
    Последнее сообщение Anonymous
  • Что означает "sys.argv [1]"? (Что такое sys.argv, и откуда это взялось?)
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Повторно инициализировать cpp std::mutex в дочернем процессе
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Изменение переменной родительского процесса в дочернем процессе в Python
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

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