如何解决如何灵活地重定向任务中的输出
如果我在灵活的文件中有此任务:
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 举报,一经查实,本站将立刻删除。