2013-07-15 98 views
0

我正在嘗試調用特定文件夾中的文件的程序工作。但是,由於某種原因,我不斷收到錯誤。我會發布相關的代碼和錯誤消息。瞭解路由錯誤(Python)

代碼:

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

+0

我不能相信有人真的命名了一個程序'性',所以舊的'男人性'笑話不再工作。就像'gmake'通過給出更明確的錯誤信息來破壞老的'做愛'玩笑。 GNU真的不是Unix。 :) – abarnert

+0

首先,當你甚至不把它們傳遞給子進程,或者對它們做任何其他事情時,創建'outdir'和'tmpdir'等的所有代碼的處理是什麼? – abarnert

回答

0

問題是subprocess不能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,或...)。