首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用鸡肉计划的“过程”连接交互工具?

使用鸡肉计划的“过程”连接交互工具?
EN

Stack Overflow用户
提问于 2018-07-15 02:53:10
回答 1查看 127关注 0票数 1

我想找出鸡方案的process程序。

当我在解释器中运行它时,这个示例代码实现了我所期望的(打印出"Hello,world!"):

代码语言:javascript
复制
(use posix)

(let-values (((in out pid) (process "echo \"Hello, world!\"")))
  (print (read-line in)))

基于此,我的期望是,如果我在echo \"Hello, world!\"中使用bc,我应该会看到bc常用的序言的第一行:

代码语言:javascript
复制
bc 1.06

相反,我会得到一个空行,直到我点击Ctrl-C才能再次得到解释器的提示。

或者,有时我会犯这样的错误:

代码语言:javascript
复制
thread is registered for I/O on unknown file-descriptor: 33 (expected 31)
[]
...more...
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<syntax>
<eval>
<eval>
<eval>
<eval>
<eval>  <--

我被踢回我的外壳提示。

此外,如何获得已开始响应输入的过程?我希望下面的内容能够打印4,但是再次得到一个空行:

代码语言:javascript
复制
(let-values (((in out pid) (process "bc")))
  (begin
    (display "2 + 2" out)
    (print (read-line in))))

我可以使用process bc**?** (如何使用)与像bc**?**这样的工具进行交互对话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-15 11:56:25

这个问题有几个组成部分。首先,您已经知道: bc将检测到它没有运行在一个终端上,所以它不会打印横幅。

第二个是简单的行缓冲:在UNIX中,只打印到端口实际上不会发送任何数据,除非您显式地刷新或发送换行符。在CHICKEN中,这可以通过在所需端口上调用flush-output来完成,或者在显示调用中添加一个换行符。我认为bc将阅读直到它看到一个换行符无论如何,所以冲洗不太可能在这里有帮助。所以要么在端口上调用newline,要么使用(display "2 + 2\n" out)而不是(display "2 + 2" out)

第三个是一个实际的错误:关于一个意外的文件描述符的错误。我已经提交了错误报告,谢谢你指出这一点!

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

https://stackoverflow.com/questions/51344859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档