0

我正在尝试使用该函数将(版本 1.10 x64)实用程序system()的输出直接通过管道传输到. 该函数始终返回,但不返回任何输出。例如:gdalinfoMatlab/Octavestatus=0

[status output] = system('"C:\Program Files\GDAL\gdalinfo.exe" "E:\DATA\image.tif"')

只会返回:

status =
    0
output =
    ''

知道为什么没有返回输出吗?

4

3 回答 3

1

'gdalinfo.exe' 似乎有些奇怪。有几个人报告说很难将程序的输出通过管道传输到文本文件 - 例如参见http://osgeo-org.1560.x6.nabble.com/GDALINFO-cannot-pipe-to-text-file-td3747928.html

所以第一个测试是 - 你能做这样的事情吗:

"C:\Program Files\GDAL\gdalinfo.exe" "E:\DATA\image.tif" > myFile.txt

并查看文件是否已创建并有任何内容?如果不是,则可能是程序使用了不同的方式来产生输出(例如,使用stderr而不是stdout)。如果可以将数据输入文本文件但不能直接输入 matlab,我想一种解决方法是写入文件,然后单独读取该文件:

tempFile = tempname; % handy built in function to create temporary file name
execCmd = '"C:\Program Files\GDAL\gdalinfo.exe ';
targetFile = '"E:\DATA\image.tif"';
status = system([execCmd targetFile ' > ' tempFile]);
output = textread( tempFile, '%s' );
system(['del ' tempFile);

现在output变量将是一个单元格数组,输入文件中每行一个单元格。

于 2013-07-08T17:24:22.387 回答
0

我在尝试从 C# 中管道输出时遇到了同样的问题。事实证明,ECW 插件破坏了该功能(我不知道如何)。如果这个插件对你来说不是很重要,进入插件目录并删除 gdal_ECWJP2ECW.dll。您应该能够使用“>”和其他东西将输出转储到文件中。

于 2013-08-22T20:57:35.493 回答
0

如果我在 Octave 目录中,这适用于我的 Windows 机器:

[status output] = system('ls bin')
于 2013-07-08T14:51:34.433 回答