微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何灵活地重定向任务中的输出

如何解决如何灵活地重定向任务中的输出

如果我在灵活的文件中有此任务:

task readme,"generate README.md":
  exec "nim c -r readme.nim > README.md"

与此readme.nim

echo "# Hello\nworld"

使用灵活(nimble readme)执行任务不会将readme.nim的输出重定向文件。 如预期的那样,从终端运行nim c -r readme.nim > README.md可以正确创建/更新README.md

这是故意的行为吗?有解决方法吗?

注释:以上内容已在Windows上进行了测试。

解决方法

感谢@xbello的回答并随后进行了讨论,我为我的用例找到了一个很好的解决方法:

task readme,"generate README.md":
  exec "nim c readme.nim"
  "README.md".writeFile(staticExec("readme"))

为什么简单的exec与以下事实有关的解释:灵活使用nimscript.exec,内部使用rawExec是内置的(根据此处针对Windows报告的不同行为进行判断)和linux)在考虑输出管道时并不是完全跨平台的。

,

我最终得到了预期的README.md:

$ cat README.md
# Hello
world

但是有时候(readme.nim必须被编译或重新编译)我最终会遇到这样的事情:

CC: readme.nim
# Hello
world

也就是说,nim c -r readme.nim命令的完整标准输出(不是标准错误)。作为解决方法,您可以将要执行的操作封装在readme.nim中:

import os

let f: File = open(commandLineParams()[0],fmWrite)
f.write "# Hello\nworld"
f.close()

在您的灵活文件中:

task readme,"generate README.md":         
  exec "nim c -r readme.nim README.md"

另一种解决方法可能是禁止输出nim c

task readme,"generate README.md":
  exec "nim c --verbosity:0 -r readme.nim > README.md"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。