首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Prolog:重定向系统输出

Prolog:重定向系统输出
EN

Stack Overflow用户
提问于 2021-10-15 03:45:49
回答 1查看 64关注 0票数 1

有一些Prolog谓词输出错误消息,如load_files/1,以防找不到该文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
error(existence_error(source_sink,'/home/foo/nothinghere.txt'),_3724).

这些错误消息只是打印到stdout,但不作为prolog返回值返回。

在我的例子中,load_files/1作为我不想修改的过程的一部分而被调用。我只需传递文件名并等待返回值。但据我所知,在这种情况下,返回值要么是True,要么是错误。有什么方法可以让我将错误输出重定向到返回值,这样我才能实际地对我得到的输出做一些事情吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 04:32:27

你可以用catch/3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?- catch(load_files('/tmp/exists.prolog'), E, true).
true.

?- catch(load_files('/tmp/notexists.prolog'), E, true).
E = error(existence_error(source_sink, '/tmp/notexists.prolog'), _).

catch(:Goal, +Catcher, :Recover)用于从:Goal中捕获throw(_)

  1. Catcherthrow/1.
  2. Recover的参数是统一的,使用call/1.

调用

在上面的示例中,E与任何错误都是一致的。我们不想这样,所以我们可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
catchFileErrors(G, F) :-
    catch(G, error(existence_error(source_sink, F), _), true).
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?- catchFileErrors(load_files('exists.prolog'), E).
true.

?- catchFileErrors(load_files('notexists.prolog'), E).
E = 'notexists.prolog'.

如果您有要从错误中恢复的策略,则可以传递一个目标作为要捕获的最后一个参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69584238

复制
相关文章
prolog实例_prolog实例
Jetbrains全家桶1年46,售后保障稳定 现在打开编辑器GNU-Prolog,打开文件可以直接询问机器:
全栈程序员站长
2022/11/16
1.3K0
UNIX 系统Shell 输入/输出重定向命令
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
用户5005176
2021/08/10
1.1K0
linux 输入输出重定向
文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 ~~~~~~~~~~~~~~~~~~~~~~~~~~ 重定向错误输出 #ls -al badfile 2> test4 #cat test4 ls: cannot access bad
葫芦
2019/04/17
4K0
8.5 输入输出重定向
大于号,重定向 > 正确输出 >> 追加重定向 2> 错误重定向 2>> 错误追加重定向 >+2>等于&> 表示结合了正确和错误 cat 1.txt > 2.txt 一个大于号表示正确的输出 大于号>,表示前面的命令输出,直接输入到后面的文件中去 就会把1.txt文件内容重定向到2.txt文件中,而2.txt之前的文件就会删除掉,重新写入1.txt文件内容 cat 1.txt >> 2.txt 两个大于号>>,就是追加,不会删除2.txt文件内容,而是在原有的基础上将1.txt文件内容写
运维小白
2018/02/06
9250
Linux标准/错误输出重定向
用法 命令 操作符号 文件名 操作符号包括: >:标准输出的重定向到文件,实际是“>”前省略了数字“1” 2>错误输出用 &>所有输出重定向到文件 可以用来分析文件的输出结果 标准输出 $ df -h >file (base) pc@pc-System-Product-Name:/project/raw_fq$ cat file1 Filesystem Size Used Avail Use% Mounted on udev 32G 0 3
Y大宽
2019/05/21
6.3K0
Linux输入输出重定向
输入重定向:把指定文件导入到命令中 输出重定向:把原本要输出到屏幕的信息写入到指定文件中 输出重定向分为:标准输出重定向和错误输出重定向 [root@linuxprobe ~]# touch linuxprobe [root@linuxprobe ~]# ls -l linuxprobe total 0 drwxr-xr-x. 3 root root 14 Jun 11 15:07 a [root@linuxprobe ~]# ls - xxxxxxx ls: cannot access -: No su
心跳包
2020/08/28
2.9K0
Linux 输出重定向 2>&1
nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &
用户2929716
2018/08/23
2.5K0
记linux输出重定向操作>&
作者:matrix 被围观: 3,396 次 发布时间:2019-10-19 分类:command Linux | 一条评论 »
HHTjim 部落格
2022/09/26
2.2K0
【Linux】项目日志——输出重定向
项目日志——输出重定向 前言 在通常情况下,Linux/UNIX每个程序在开始运行的时候,都会自动打开三个标准stream(流),分别为标准输入流stdin(文件描述符0),标准输出流stdout(文件描述符1),标准错误输出流stderr(文件描述符2)。 Linux的本质就是一切皆文件,输入输出设备也是以文件形式存在和管理的。 stderr是不缓存的,stdout则进行行间缓存,即遇到\n才打印输出。示例如下: #include <stdio.h> #include <unistd.h>
半生瓜的blog
2023/05/13
1.3K0
【Linux】项目日志——输出重定向
Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。
小小工匠
2021/08/16
1.1K0
将make的输出(标准输出/标准错误输出)重定向到文件 _
此时默认情况是没有改变2=stderr的输出方式,还是屏幕,所以,如果有错误信息,还是可以在屏幕上看到的。
玖柒的小窝
2021/09/15
5.1K0
wget:重定向响应输出到stdout
如何将输出的内容输出到stdout呢?这里就用到了-O选项,下面是从wget使用说明(man wget)中摘抄的关于-O选项的原文描述:
10km
2019/08/29
1.5K0
Linux下 标准错误输出重定向
Linux下” >/dev/null 2>&1 “相关知识说明 在学习Linux的过程中,常会看到一些终端命令或者程序中有”>/dev/null 2>&1 “出现,由于已经遇到了好几次了,为了理解清楚,百度了一下相关的知识。 command >/dev/null 2>&1 & == command 1>/dev/null 2>&1 & 0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr) 1)command : 表示shell命令或者为一个
程序员鹏磊
2018/02/09
3.1K0
重定向Kubernetes pod中的tcpdump输出
最新发现一个比较有意思的库ksniff,它是一个kubectl 插件,使用tcpdump来远程捕获Kubernetes集群中的pod流量并保存到文件或输出到wireshark中,发布网络问题定位。使用方式如下:
charlieroro
2023/02/25
1.1K0
python标准输出 标准错误 重定向
2、ls > log 2>&1  标准输出和标准错误都输出到log,&> log也可以,但是会有版本限制
py3study
2020/01/08
2.7K0
(18)Bash输入输出重定向
从字面意义上我们可以这样理解:输出本来是当我进行命令后,输出到屏幕上,现在我不让他输出到屏幕,改变他的输出方向,把他输出到文件当中,就叫输出重定向。
生信real
2020/08/26
1.1K0
(18)Bash输入输出重定向
linux如何将输出重定向到文件和标准输出
原文链接:https://rumenz.com/rumenbiji/linux-file-stdin-stdout.html
入门笔记
2021/11/26
5.1K0
linux如何将输出重定向到文件和标准输出
调用ls -al > rumenz.txt会将来自该命令的任何输出重定向到指定的文件,有没有办法将输出重定向到文件并将其显示在标准输出上? > ls -al > rumenz.txt 上面的命令执行后,数据被输入到rumenz.txt文件,屏幕没有任何输出,如果既想输入到文件又想输入到屏幕,请使用如下的方法. 使用tee 如果您只关心标准输出 > ls -al | tee rumenz.txt 如果要包含 stderr,请执行以下操作,会覆盖之前的数据 > ls -al 2>&1 | tee rumen
入门笔记
2022/06/02
5.4K0
Prolog 语言入门教程
Prolog 是一种与众不同的语言,不用来开发软件,专门解决逻辑问题。比如,"苏格拉底是人,人都会死,所以苏格拉底会死"这一类的问题。
ruanyf
2020/01/21
3.4K0
python 重定向输入输出流 脚本
file-like objects that save standard output text in a string and provide
用户5760343
2022/05/13
6540

相似问题

专家系统中的Prolog和“反向”输出

12

Prolog函数输出

20

Prolog歧义输出

10

Prolog解析输出

11

Prolog格式输出

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文