Как написать программу пролога для управления другой программой командной строки?
Я хотел бы узнать, как написать программу на прологе для управления другой программой командной строки.
В качестве конкретного примера скажу, что я хочу управлять 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. Возможна ли эта идея? Каков хороший способ реализовать это?