如何在 Windows 上通过管道传输 Scilab
How to pipe Scilab on Windows
我正在尝试在 Windows 上使用 Scilab 进行简单的管道传输,但它在 cmd.exe
和 PowerShell 中都不起作用。
我知道我可以像echo %pi | scilex -nb -quit
一样简单地将命令传递给解释器,但我想传递和读取数据而不是直接发送命令。
我正在使用 mgetl
和文件描述符 %io(1)
来访问标准输入,但是 returned 值是一个空矩阵:
>echo Hello, World! | scilex -nb -quit -e "mgetl(%io(1))"
ans =
[]
如果我使用 type
和一个文件,同样的行为也会发生。这里 tmp
有一个换行符,但这无关紧要,因为无论有没有它,行为都是一样的:
>type tmp
Hello,
World!
>type tmp | scilex -nb -quit -e "mgetl(%io(1))"
ans =
[]
然而,通过移除管道的左侧并保持 %io(1)
使 Scilab 等待用户输入直到 return 然后 Ctrl+C被按下:
>scilex -nb -quit -e "mgetl(%io(1))"
Hello, World!
ans =
"Hello, World!"
使用 fd=mopen('tmp'); mgetl(fd), mclose(fd);
作为表达式参数,正如预期的那样有效,但这不是我想要的,因为它取决于保存的文件。
我想通过在 cmd.exe
或 PowerShell 中使用 |
直接从另一个进程的输出中读取数据。
这种方法有什么问题?这是意外行为吗?
您似乎无法使用 mgetl
读取 stdin,但使用使用 Fortran 格式的 read
可以正常工作
C:\>echo Hello, World! | scilex -nb -e "read(%io(1),1,1,'(a)')"
ans =
"Hello, World! "
C:\>
mgetl 无法从 stdin 读取的事实是一个错误,将在即将发布的 Scilab (6.1.1) 版本中修复:http://codereview.scilab.org/#/c/21778,感谢报告。
我正在尝试在 Windows 上使用 Scilab 进行简单的管道传输,但它在 cmd.exe
和 PowerShell 中都不起作用。
我知道我可以像echo %pi | scilex -nb -quit
一样简单地将命令传递给解释器,但我想传递和读取数据而不是直接发送命令。
我正在使用 mgetl
和文件描述符 %io(1)
来访问标准输入,但是 returned 值是一个空矩阵:
>echo Hello, World! | scilex -nb -quit -e "mgetl(%io(1))"
ans =
[]
如果我使用 type
和一个文件,同样的行为也会发生。这里 tmp
有一个换行符,但这无关紧要,因为无论有没有它,行为都是一样的:
>type tmp
Hello,
World!
>type tmp | scilex -nb -quit -e "mgetl(%io(1))"
ans =
[]
然而,通过移除管道的左侧并保持 %io(1)
使 Scilab 等待用户输入直到 return 然后 Ctrl+C被按下:
>scilex -nb -quit -e "mgetl(%io(1))"
Hello, World!
ans =
"Hello, World!"
使用 fd=mopen('tmp'); mgetl(fd), mclose(fd);
作为表达式参数,正如预期的那样有效,但这不是我想要的,因为它取决于保存的文件。
我想通过在 cmd.exe
或 PowerShell 中使用 |
直接从另一个进程的输出中读取数据。
这种方法有什么问题?这是意外行为吗?
您似乎无法使用 mgetl
读取 stdin,但使用使用 Fortran 格式的 read
可以正常工作
C:\>echo Hello, World! | scilex -nb -e "read(%io(1),1,1,'(a)')"
ans =
"Hello, World! "
C:\>
mgetl 无法从 stdin 读取的事实是一个错误,将在即将发布的 Scilab (6.1.1) 版本中修复:http://codereview.scilab.org/#/c/21778,感谢报告。