2013-07-15 3 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' разрушил старую шутку« make love », предоставив более четкие сообщения об ошибках. GNU действительно не Unix. :) – abarnert

+0

Во-первых, что такое сделка со всем этим кодом для создания 'outdir' и' tmpdir' и т. Д., Когда вы даже не передаете их дочернему процессу или ничего не делаете с ними? – abarnert

ответ

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 в вызове, или убедитесь, что он правильно установлен, или убедитесь, что ваш скрипт работает с правом окружающей среды (например, может быть, вы добавили /opt/sex/bin к вашему PATH только в интерактивных сценариев, или вы добавили его только для своего собственного пользователя, но вы пытаетесь запустить скрипт как nobody или ...).

Смежные вопросы