我想找出鸡方案的process程序。
当我在解释器中运行它时,这个示例代码实现了我所期望的(打印出"Hello,world!"):
(use posix)
(let-values (((in out pid) (process "echo \"Hello, world!\"")))
(print (read-line in)))基于此,我的期望是,如果我在echo \"Hello, world!\"中使用bc,我应该会看到bc常用的序言的第一行:
bc 1.06相反,我会得到一个空行,直到我点击Ctrl-C才能再次得到解释器的提示。
或者,有时我会犯这样的错误:
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,但是再次得到一个空行:
(let-values (((in out pid) (process "bc")))
(begin
(display "2 + 2" out)
(print (read-line in))))我可以使用process bc**?** (如何使用)与像bc**?**这样的工具进行交互对话
发布于 2018-07-15 11:56:25
这个问题有几个组成部分。首先,您已经知道: bc将检测到它没有运行在一个终端上,所以它不会打印横幅。
第二个是简单的行缓冲:在UNIX中,只打印到端口实际上不会发送任何数据,除非您显式地刷新或发送换行符。在CHICKEN中,这可以通过在所需端口上调用flush-output来完成,或者在显示调用中添加一个换行符。我认为bc将阅读直到它看到一个换行符无论如何,所以冲洗不太可能在这里有帮助。所以要么在端口上调用newline,要么使用(display "2 + 2\n" out)而不是(display "2 + 2" out)。
第三个是一个实际的错误:关于一个意外的文件描述符的错误。我已经提交了错误报告,谢谢你指出这一点!
https://stackoverflow.com/questions/51344859
复制相似问题