使用 www_open_url/1

Using www_open_url/1

我知道 www_open_url/1 应该启动我的默认浏览器并转到网页。但是我的 ubuntu 电脑不这样做。如果我正常启动 prolog,我会收到错误 'Couldn't get a file descriptor refering to the console' 。如果我以 sudo 方式启动 swipl,它只是 returns true 但不会启动浏览器。我通常不想像 sudo 那样使用这个谓词。这是一个痕迹:

www_open_url('http://www.bbc.co.uk').
Call: (6) www_browser:www_open_url('http://www.bbc.co.uk') ? creep
Call: (7) current_prolog_flag(browser, _G397) ? creep
Fail: (7) current_prolog_flag(browser, _G397) ? creep
Redo: (6) www_browser:www_open_url('http://www.bbc.co.uk') ? creep
Call: (7) getenv('BROWSER', _G397) ? creep
Fail: (7) getenv('BROWSER', _G397) ? creep
Redo: (6) www_browser:www_open_url('http://www.bbc.co.uk') ? creep
Call: (7) www_browser:open_command(_G396) ? creep
Exit: (7) www_browser:open_command('gnome-open') ? creep
Call: (7) www_browser:has_command('gnome-open') ? creep
Call: (8) www_browser:command_cache('gnome-open', _G397) ? creep
Exit: (8) www_browser:command_cache('gnome-open', -) ? creep
Call: (8) (-)\== (-) ? creep
Fail: (8) (-)\== (-) ? creep
Fail: (7) www_browser:has_command('gnome-open') ? creep
Redo: (7) www_browser:open_command(_G396) ? creep
Exit: (7) www_browser:open_command(open) ? creep
Call: (7) www_browser:has_command(open) ? creep
Call: (8) www_browser:command_cache(open, _G397) ? creep
Exit: (8) www_browser:command_cache(open, '/bin/open') ? creep
Call: (8) '/bin/open'\== (-) ? creep
Exit: (8) '/bin/open'\== (-) ? creep
Exit: (7) www_browser:has_command(open) ? creep
 Call: (7) www_browser:expand_url_path('http://www.bbc.co.uk', _G397)  ?   creep
Call: (8) atomic('http://www.bbc.co.uk') ? creep
Exit: (8) atomic('http://www.bbc.co.uk') ? creep
Exit: (7) www_browser:expand_url_path('http://www.bbc.co.uk',   'http://www.bbc.co.uk') ? creep


^  Call: (7) format(string(_G389), '~w "~w"', [open,  'http://www.bbc.co.uk']) ? creep
^  Exit: (7) format(string("open \"http://www.bbc.co.uk\""), '~w "~w"',  [open, 'http://www.bbc.co.uk']) ? creep
Call: (7) shell("open \"http://www.bbc.co.uk\"") ? creep
Exit: (7) shell("open \"http://www.bbc.co.uk\"") ? creep
Exit: (6) www_browser:www_open_url('http://www.bbc.co.uk') 
? creep
true.

如您所见,您的序言进行了三次往返并最终使用 open 这可能意味着 mac 用户的后备(这不是您想要的程序在这种情况下使用)。首先,它尝试从 prolog 环境中读取浏览器标志,然后尝试从 systen 环境中读取 BROWSER 变量。如果这两个都失败了,它会寻找一个名为 gnome-open 的程序。之后,它会寻找一个名为 open 的程序。以下是您可能会获得正确计划的一些方法:

尝试在您启动 prolog 的环境中设置 $BROWSER 变量。一种可能是这样启动您的 Prolog:

BROWSER=<your browser command> swipl

您也可以在 .*shrc 中设置它以供将来使用(可能是个好主意,因为 BROWSER 变量是其他程序所依赖的:

export BROWSER=<your browser command>

另一种方法是尝试为 prolog 设置浏览器:将其放在 ~/.plrc 中的某处以便为当前用户设置它,或者在您的 prolog 文件中的某处为当前应用程序设置它:

:- set_prolog_flag(browser, 'chrome').

如果这些没有帮助,请尝试安装 gnome-open

该错误可能也与 SWI-Prolog 版本有关。您是否尝试安装最新的开发版本 (7.1.37)?