IRAF运行imstat命令时如何忽略损坏fits文件继续执行
FITS批量统计跳过损坏文件配置方法
问题现象
现有3个FITS格式图像,分别为file1.fits、file2.fits、file3.fits,其中file2.fits为截断损坏的文件:
- 执行
imheader命令可正常读取头信息,返回结果:
file1.fits[1092,736][ushort]: bias file2.fits[1092,736][ushort]: ASAS135406 file3.fits[1092,736][ushort]: flat
- 执行
imstat做像素统计时触发报错:
ERROR: Pixel storage file is truncated (file2.fits)
默认执行逻辑下,命令遇到损坏文件会直接终止进程,仅能返回排在坏文件之前的正常图像统计结果,无法完成后续file3.fits的统计操作。
操作方案
imstat本身没有提供内置的"跳过错误文件"开关,不要尝试修改系统全局错误抑制参数——这类操作会屏蔽所有报错,后续遇到其他类型的文件错误也不会提示,很容易引发隐蔽的数据问题。最稳妥的实现方式是逐文件循环执行,单独捕获单个文件的报错后跳过,不中断整体流程:
- 如果在IRAF/PyRAF的CL环境下操作,使用带错误捕获的循环即可:
string filelist = "file1.fits,file2.fits,file3.fits" string curfile for (curfile = filelist; curfile != ""; curfile = substr(curfile, stridx(",", curfile)+1, strlen(curfile))) { print("当前处理: "//curfile) # 捕获单文件执行错误,报错直接跳过 { imstat(curfile) } catch { print("* 文件损坏,已跳过: "//curfile) } }
- 如果直接在Linux Shell下调用imstat命令,用shell循环判断命令返回值即可实现跳过逻辑:
#!/bin/bash for fits in *.fits; do echo "当前处理: $fits" # 执行统计,判断返回值,非0即为执行失败 if ! imstat "$fits" 2>/dev/null; then echo "* 文件损坏,已跳过: $fits" fi done
这种方式只会跳过触发读取错误的损坏文件,剩余正常文件的统计流程会全部跑完,同时不会屏蔽其他类型的操作报错,不会影响后续其他任务的错误提示。
内容的提问来源于stack exchange,提问作者Pritam Das
相关产品推荐
相关产品推荐

