如何灵活地重定向任务中的输出
How to redirect output in a task in nimble
如果我在一个灵活的文件中有这个任务:
task readme, "generate README.md":
exec "nim c -r readme.nim > README.md"
用这个 readme.nim
:
echo "# Hello\nworld"
使用 nimble (nimble readme
) 执行任务不会将 readme.nim 的输出重定向到文件。
正如预期的那样 运行 nim c -r readme.nim > README.md
从终端正确 creates/updates README.md
.
这是 nimble 的预期行为吗?有解决方法吗?
注意:以上是在windows.
上测试的
我最终得到了预期的 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"
感谢@xbello 的回答和随后的讨论,我为我的用例找到了一个很好的解决方法:
task readme, "generate README.md":
exec "nim c readme.nim"
"README.md".writeFile(staticExec("readme"))
解释为什么简单的 exec
与 nimble 使用 nimscript.exec 内部使用 rawExec
的事实有关(根据此处报告的不同行为判断) windows 和 linux) 在输出管道方面并不完全是 cross-platform。
如果我在一个灵活的文件中有这个任务:
task readme, "generate README.md":
exec "nim c -r readme.nim > README.md"
用这个 readme.nim
:
echo "# Hello\nworld"
使用 nimble (nimble readme
) 执行任务不会将 readme.nim 的输出重定向到文件。
正如预期的那样 运行 nim c -r readme.nim > README.md
从终端正确 creates/updates README.md
.
这是 nimble 的预期行为吗?有解决方法吗?
注意:以上是在windows.
上测试的我最终得到了预期的 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"
感谢@xbello 的回答和随后的讨论,我为我的用例找到了一个很好的解决方法:
task readme, "generate README.md":
exec "nim c readme.nim"
"README.md".writeFile(staticExec("readme"))
解释为什么简单的 exec
与 nimble 使用 nimscript.exec 内部使用 rawExec
的事实有关(根据此处报告的不同行为判断) windows 和 linux) 在输出管道方面并不完全是 cross-platform。