Как написать программу пролога для управления другой программой командной строки?

Я хотел бы узнать, как написать программу на прологе для управления другой программой командной строки.

В качестве конкретного примера скажу, что я хочу управлять mps-youtube ( https://github.com/mps-youtube/mps-youtube). Для начала мне нужно иметь какой-то цикл, который читает экранные меню и возможность вводить команды для управления программой. Это то, что я написал до сих пор:

youtube :-
    setup_call_cleanup(
        process_create(path(mpsyt), [],
                       [ stdout(pipe(Out)),stdin(pipe(In))
                       ]),
        (   read_lines(Out, Lines),
            maplist(writeln,Lines),
        my_command_loop(In,Out)),
        close(Out)).


read_lines(Out, Lines) :-
        read_line_to_codes(Out, Line1),
        read_lines(Line1, Out, Lines).

read_lines(end_of_file, _, []) :- !.
read_lines(Codes, Out, [Line|Lines]) :-
        atom_codes(Line, Codes),
        read_line_to_codes(Out, Line2),
        read_lines(Line2, Out, Lines).



my_command_loop(In,Out):-
    writeln("Enter a command:"),
    read(command(Command)),
    dif(Command,stop),
    writeln(Command),
    writeln(In,Command),
    read_lines(Out,Lines),
    maplist(writeln,Lines),
    my_command_loop(In,Out).

my_command_loop(_,_):-
    true.

Идея в том, что я буду взаимодействовать с этим, например, введя command('/ oasis') с последующим command(1). и наконец command(stop).

Если я пытаюсь запустить это, я получаю следующие ошибки:

Traceback (most recent call last):
  File "/usr/bin/mpsyt", line 9, in <module>
    load_entry_point('mps-youtube==0.2.5', 'console_scripts', 'mpsyt')()
  File "/usr/lib/python3/dist-packages/mps_youtube/main.py", line 4696, in main
    set_window_title("mpsyt")
  File "/usr/lib/python3/dist-packages/mps_youtube/main.py", line 152, in set_window_title
    sys.stdout.write(xenc('\x1b]2;' + title + '\x07'))
TypeError: write() argument must be str, not bytes

что говорит о том, что программа python mps-youtube не загружается правильно в process_create. Возможна ли эта идея? Каков хороший способ реализовать это?

0 ответов

Другие вопросы по тегам