Thanks! I didn't check the Linux version yet, but the Windows one doesn't seem
to really do what I need: specifically, if I print from a Nim file like this:
# q_outerr.nim
import os
stdout.writeLine "some stdout"
stderr.writeLine "some stderr"
stderr.writeLine "some stderr2"
sleep(milsecs = 5_000)
stderr.writeLine "some stderr3"
stderr.writeLine "some stderr4"
Run
with the windows part of the "reader" file modified like this:
# q_peek.nim
...
else:
echo "on windows"
let prc = startProcess("q_outerr", options = {})
var errstream = errorStream prc
var outstream = outputStream prc
while true:
if errstream.atEnd:
echo "err end"
else:
let edata = errstream.peekLine
if edata != "":
echo "stderr: ", errstream.readLine
if outstream.atEnd:
echo "out end"
else:
let odata = outstream.peekLine
if odata != "":
echo "stdout: ", outstream.readLine
if errstream.atEnd and outstream.atEnd:
echo "-break-"
break
...
Run
I'm getting a SIGSEGV:
on windows
Traceback (most recent call last)
C:\prog\mana\q_peek.nim(61) q_peek
C:\prog\mana\q_peek.nim(48) main
C:\Users\Mateusz\.choosenim\toolchains\nim-1.0.4\lib\pure\streams.nim(979)
peekLine
C:\Users\Mateusz\.choosenim\toolchains\nim-1.0.4\lib\pure\streams.nim(213)
getPosition
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Error: execution of an external program failed: 'C:\prog\mana\q_peek.exe '
Run
I also tried readLine instead of peekLine, but then the sleep makes q_peek
block until after sleep is finished. I want to be able to discern if there's
some stderr available from a _not yet finished_ subprocess...
What do you refer to in: " _createIoCompletionPort_ apparently couldn't work"?
couldn't where? did someone try it sometime? I think in Go they maybe managed
to somehow make it work?
For now, at least as far as solution for Windows, it seems I'm still looking
for help...