gpt4 book ai didi

haskell - 跨平台空句柄或忽略进程的输出

转载 作者:行者123 更新时间:2023-12-05 05:08:35 24 4
gpt4 key购买 nike

这似乎是一个非常简单的问题:如果在 Unix 系统上我想丢弃进程的输出(来自 process 库),以下注释 ( original Haddock link) 似乎是相关的:

... If you wish to ignore the child process's output you should either create a pipe and drain it manually or pass a Handle that writes to /dev/null.

而且效果很好。我遇到的问题是 openFile "/dev/null"WriteMode 在 Windows 上无法正常工作 - 它会创建一个名为 /dev/null 的实际文件。

是否有一些跨平台的方法来获取一个只忽略其输入的 Handle?其他 SO 问题让我想到 openFile "nul"WriteModeopenFile "null"WriteMode 之一应该工作,但似乎都没有正确忽略输出(参见 this line 462 of this log 的前者的例子工作)。

最佳答案

来自 File paths under Windows在 GHC 手册中:

Since GHC 8.6.1, the Haskell I/O manager automatically promotes paths in the legacy format to Win32 file namespace. By default the I/O manager will do two things to your paths:

  • replace \ with \\
  • expand relative paths to absolute paths

If you want to opt out of all preprocessing just expliticly use namespaces in your paths. Due to this change, if you need to open raw devices (e.g. COM ports) you need to use the device namespace explicitly. (e.g. \\.\COM1). GHC and Haskell programs in general no longer support opening devices in the legacy format.

因此,在 GHC 8.6.1 及更高版本中,您现在需要使用 \\.\NUL,而不是使用 NULlike silently had to change .

关于haskell - 跨平台空句柄或忽略进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com