从LISP调用的命令在缓冲IO流方面遇到问题,如何将其关闭?我发现只有冲洗功能,在这种情况下没有任何好处。
答案 0 :(得分:4)
没有可移植的方式来打开和关闭缓冲,并且有一个很好的理由:缓冲的i / o速度提高了几个数量级。
你可能能够在你使用的实现中找到如何做到这一点,但这将是浪费时间 - 你很快就会意识到这是一个错误。请帮个忙,不要回溯我的步骤 - 差不多20年前我试过了。
完成写作后,只需flush the output。
您可以使用类或宏来封装它,这样就不会涉及其他类型。
请注意,我建议的方法将使您的代码更具可读性 - 它将要求您明确指定您的消息边界。 请记住,您为其他人(以及从现在起6个月后自己!)编写代码以进行读取,修改和调试。
答案 1 :(得分:0)
所以,我终于找到了问题(也许是bug ??)
表单看起来像这样(SBCL API)
(run-program "sudo" '("mv" "foo.txt" "/usr/bin")
:search t
:output t
:input t
:wait t)
这正是我想要的方式,问题是输入和输出args而不是t,我指定*standard-input*
和*standard-output*
导致命令不正确(如果被调用的程序需要一些输入来自像sudo这样的用户)。
不知道为什么,但至少它现在有效。