如何从swi-prolog终端调用python脚本

时间:2016-11-02 06:00:27

标签: python prolog swi-prolog

Swi-prolog提供了一个内置的“shell”谓词来与操作系统进行交互,但是文档很差。

对于Windows平台,我想执行以下内容:

shell('cmd.exe python file_name.py')

这会挂起终端!

但如果我使用:shell('cmd.exe ipconfig')
这给了一个真实的,因此我认为它正在发挥作用。

1 个答案:

答案 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).