Swi-prolog提供了一个内置的“shell”谓词来与操作系统进行交互,但是文档很差。
对于Windows平台,我想执行以下内容:
shell('cmd.exe python file_name.py')
这会挂起终端!
但如果我使用:shell('cmd.exe ipconfig')
这给了一个真实的,因此我认为它正在发挥作用。
答案 0 :(得分:1)
您可以在process_create/3
setup_call_cleanup/3
我没有在windows中尝试过这个,但我认为它会类似: (我还展示了如何调用罐子)
run_jar(Jar,Option,Lines):-
setup_call_cleanup(
process_create(path(java),['-jar',Jar,Option],[stdout(pipe(Out))]),
read_lines(Out,Lines),
close(Out)).
run_python(Script,Option,Lines):-
setup_call_cleanup(
process_create(path(python),[Script,Option],[stdout(pipe(Out))]),
read_lines(Out,Lines),
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).