使用www_open_url / 1

时间:2015-04-24 11:22:52

标签: prolog swi-prolog

我了解www_open_url/1应启动我的默认浏览器并转到网页。但我的ubuntu计算机不这样做。如果我正常开始prolog我得到错误'无法获得引用控制台的文件描述符' 。如果我将swipl作为sudo启动它只返回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.

2 个答案:

答案 0 :(得分:1)

正如您所看到的,您的prolog进行了三次往返并最终使用BROWSER,这可能是mac用户的后备(它不是您想要在此上下文中使用的程序)。首先,它尝试从prolog环境中读取浏览器标志,然后尝试从systen环境中读取gnome-open变量。如果这两个失败,它会查找名为$BROWSER的程序。之后,它会查找名为open的程序。您可以通过以下方式获得正确的计划:

尝试在您开始启动的环境中设置BROWSER=<your browser command> swipl 变量。一种可能性就是启动您的Prolog:

.*shrc

您也可以在BROWSER中进行设置以备将来使用(可能是个好主意,因为export BROWSER=<your browser command> 变量是其他程序所依赖的变量:

~/.plrc

另一种方法是尝试为prolog设置浏览器:将其放在:- set_prolog_flag(browser, 'chrome'). 中的某个位置,以便为当前用户设置它,或者在prolog文件中的某个位置为当前应用程序设置它:

gnome-open

如果这些没有帮助,请尝试安装UIViewController

答案 1 :(得分:1)

可能错误也可能是指SWI-Prolog版本。您是否尝试安装上一个开发版本(7.1.37)?