我正在尝试使程序能够调用特定文件夹中的文件。但是,出于某种原因,我不断收到错误。我将发布相关代码和错误消息。
代码:
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 :(得分: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
运行,或者......)。