0

我正在尝试制作一个调用特定文件夹中文件的程序。但是,由于某种原因,我不断收到错误消息。我将发布相关代码和错误消息。

代码:

def objmask(inimgs, inwhts, thresh1='20.0', thresh2='2.0', tfdel=True, 
            xceng=3001., yceng=3001., outdir='.', tmpdir='tmp'):
# initial detection of main galaxy with SExtractor for re-centering purposes
    if outdir!='.':
        if not os.path.exists(outdir):
            os.makedirs(outdir)

    if not os.path.exists(tmpdir):
        os.makedirs(tmpdir)
    for c in range(np.size(inimgs)):
        print 'Creating Aperture Run:', c
        subprocess.call(['sex',inimgs[c],'-c','/home/vidur/se_files/gccg.sex',
                         '-CATALOG_NAME','/home/vidur/se_files/_tmp_seobj'+str(c)+'.cat',
                         '-PARAMETERS_NAME','/home/vidur/se_files/gccg_ell.param',
                         '-FILTER_NAME','/home/vidur/se_files/gccg.conv',
                         '-STARNNW_NAME','/home/vidur/se_files/gccg.nnw',
                         '-CHECKIMAGE_TYPE','APERTURES',
                         '-VERBOSE_TYPE','QUIET',
                         '-DETECT_THRESH',thresh1,
                         '-ANALYSIS_THRESH',thresh2,
                         '-WEIGHT_IMAGE',inwhts[c]],shell=True
                         )

错误:

Creating Aperture Run: 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "fetch_swarp2.py", line 110, in objmask
    '-WEIGHT_IMAGE',inwhts[c]],
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

我的主目录中有一个名为 se_files 的文件夹。它的路径是/home/username/se_files。这是在 Ubuntu 上,12.04 32 位。

4

1 回答 1

0

问题是subprocesscan't sex,大概是因为它不在你的 PATH 上。

call函数永远不会引发异常,因为它运行的程序返回失败;它只是将失败作为一个数字返回给您。它只会引发它一开始就无法运行程序。

您可以很容易地看到差异:

>>> import subprocess
>>> subprocess.call(['nosuchprogram'])
[long traceback skipped]
FileNotFoundError: [Errno 2] No such file or directory: 'nosuchprogram'
>>> subprocess.call(['ls', 'nosuchfile'])
ls: nosuchfile: No such file or directory
1

第一个加注;第二个返回1

因此,将绝对路径放入sex调用中,或确保它已正确安装,或确保您的脚本在正确的环境下运行(例如,您可能/opt/sex/binPATH在交互式脚本中添加了它,或者您只为自己添加了它用户,但您尝试将脚本作为nobody, 或...) 运行。

于 2013-07-15T20:34:47.887 回答