我正在尝试使用该函数将(版本 1.10 x64)实用程序system()
的输出直接通过管道传输到. 该函数始终返回,但不返回任何输出。例如:gdalinfo
Matlab/Octave
status=0
[status output] = system('"C:\Program Files\GDAL\gdalinfo.exe" "E:\DATA\image.tif"')
只会返回:
status =
0
output =
''
知道为什么没有返回输出吗?
我正在尝试使用该函数将(版本 1.10 x64)实用程序system()
的输出直接通过管道传输到. 该函数始终返回,但不返回任何输出。例如:gdalinfo
Matlab/Octave
status=0
[status output] = system('"C:\Program Files\GDAL\gdalinfo.exe" "E:\DATA\image.tif"')
只会返回:
status =
0
output =
''
知道为什么没有返回输出吗?
'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
变量将是一个单元格数组,输入文件中每行一个单元格。
我在尝试从 C# 中管道输出时遇到了同样的问题。事实证明,ECW 插件破坏了该功能(我不知道如何)。如果这个插件对你来说不是很重要,进入插件目录并删除 gdal_ECWJP2ECW.dll。您应该能够使用“>”和其他东西将输出转储到文件中。
如果我在 Octave 目录中,这适用于我的 Windows 机器:
[status output] = system('ls bin')