了解路由错误(Python)

时间:2013-07-15 20:14:38

标签: python ubuntu runtime-error

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

代码:

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位。

1 个答案:

答案 0 :(得分:0)

问题是subprocess无法sex,大概是因为它不在你的路径上。

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的绝对路径,或确保它已正确安装,或确保您的脚本在正确的环境中运行(例如,您可能添加了{{1}仅在交互式脚本中添加到/opt/sex/bin,或者您只是为自己的用户添加了它,但是您尝试将脚本作为PATH运行,或者......)。