sh: 语法错误:文件描述符错误

12

我需要帮助运行这段代码。我从(http://easybioinfo.free.fr/?q=content/amber-trajectory-gromacs-xtc-conversion)获得了这段代码。

当我执行这段代码时,出现了一些错误。我将这些错误粘贴在以下代码下方:

    #!/usr/bin/python

#Workflow based on Trajectory Converter - v1.5 by: Justin Lemkul 
#completely reimplemented and improved by Peter Schmidtke & Jesus Seco

import sys,os,re,fnmatch

if len(sys.argv)>4 :
    f=sys.argv[1]
    if not os.path.exists(f):
        sys.exit(" ERROR : Something you provided does not exist. Breaking up.\n\nUSAGE : python trajconv_peter.py  amberCrd amberTop trajDir trajPattern outPutPrefix\n\n \
Example : python amber2xtc.py mdcrd.crd mdcrd.top md *.x.gz md_gromacs\n")
else :
    sys.exit(" \n  USAGE : python amber2xtc.py AMBERCRD AMBERTOP TRAJDIR TRAJPATTERN OUTPUTPREFIX\n\
    Example : python amber2xtc.py mdcrd.crd mdcrd.top md *.x.gz md_gromacs\n\
    Note that the AmberCrd can also be a PDB file.\n")

crd=sys.argv[1]
top=sys.argv[2]
trajdir=sys.argv[3]
pattern=sys.argv[4]
outputPref=sys.argv[5]

traj_files=fnmatch.filter(os.listdir(trajdir),pattern) #get the fpocket output folders


RE_DIGIT = re.compile(r'(\d+)')     #set a pattern to find digits
ALPHANUM_KEY = lambda s: [int(g) if g.isdigit() else g for g in RE_DIGIT.split(s)]      #create on the fly function (lambda)    to return numbers in filename strings
traj_files.sort(key=ALPHANUM_KEY)      #sort by these numbers in filenames

print "Will convert the following files : "
print traj_files

csn=1
for file in traj_files :
    ptrajtmp=open("ptraj_tmp.ptr","w")
    print "currently converting "+file
    ptrajtmp.write("trajin "+trajdir+os.sep+file+"\n")
    ptrajtmp.write("reference "+crd+"\n")
    ptrajtmp.write("center ~:WAT,CIO mass origin\n")
    ptrajtmp.write("image origin center :* byres familiar\n")

    ptrajtmp.write("trajout pdb_tmp/mdcrd.pdb pdb")
    ptrajtmp.close()
    if not os.path.exists("pdb_tmp"):
        os.mkdir("pdb_tmp")

    os.system("ptraj "+top +" ptraj_tmp.ptr >/dev/null 2>&1")
    if not os.path.exists("xtc_tmp"):
        os.mkdir("xtc_tmp")
    #move to *.pdb
    os.system("cd pdb_tmp; ls *.pdb.* | cut -f3 -d\".\" | awk '{print \"mv mdcrd.pdb.\"$0\" mdcrd_\"$0\".pdb\" }' | sh ; cd ../")   
    pdb_files=fnmatch.filter(os.listdir("pdb_tmp"),"*.pdb")
    pdb_files.sort(key=ALPHANUM_KEY)      #sort by these numbers in filenames   
    if csn==1:
        os.system("editconf -f pdb_tmp/mdcrd_1.pdb -o "+outputPref+"_t1_top.gro >/dev/null 2>&1")

    for pdb in pdb_files:
        os.system("echo \"0\" | trjconv -s pdb_tmp/"+pdb+" -f pdb_tmp/"+pdb+" -o xtc_tmp/traj_"+str(csn)+".pdb.xtc -t0 "+str(csn)+" >/dev/null 2>&1")
        csn+=1
    if os.path.exists(outputPref+"_traj.xtc"):
        os.system("trjcat -f "+outputPref+"_traj.xtc xtc_tmp/*.pdb.xtc -o "+outputPref+"_traj.xtc >& trajcat.log")
    else :
        os.system("trjcat -f xtc_tmp/*.pdb.xtc -o "+outputPref+"_traj.xtc >& trajcat.log")
    os.system("rm -rf pdb_tmp/*.pdb")

    os.system("rm -rf xtc_tmp/*.xtc")


os.remove("ptraj_tmp.ptr")
os.system("rmdir pdb_tmp")
os.system("rmdir xtc_tmp")

错误如下:

 vijay@glycosim:~/Simulation-Folder-Feb2013/chapter5-thermo-paper2-Vj/analysis-malto-/28-difusion-coeff-malto-thermo/convert-gromacs-format$ python2.7 amber2xtc.py malto-THERMO.crd malto-THERMO.top TRAJDIR malto*.traj md_gromacss
 Will convert the following files : 
 ['malto-thermo.set11.traj', 'malto-thermo.set12.traj', 'malto-thermo.set13.traj', 'malto-thermo.set14.traj', 'malto-thermo.set15.traj']
 currently converting malto-thermo.set11.traj
 ls: cannot access *.pdb.*: No such file or directory
 sh: Syntax error: Bad fd number
 currently converting malto-thermo.set12.traj
 ls: cannot access *.pdb.*: No such file or directory
 sh: Syntax error: Bad fd number
 currently converting malto-thermo.set13.traj
 ls: cannot access *.pdb.*: No such file or directory
 sh: Syntax error: Bad fd number
 currently converting malto-thermo.set14.traj
 ls: cannot access *.pdb.*: No such file or directory
 sh: Syntax error: Bad fd number
 currently converting malto-thermo.set15.traj
 ls: cannot access *.pdb.*: No such file or directory
 sh: Syntax error: Bad fd number
 vijay@glycosim:~/Simulation-Folder-Feb2013/chapter5-thermo-paper2-Vj/analysis-malto-/28-difusion-coeff-malto-thermo/convert-gromacs-format$

提供信息,我正在使用Ubuntu 11.10(64位)。

如何纠正这个错误?感谢任何帮助。谢谢。


遵循PEP-8 - pradyunsg
2个回答

35
问题可能是在Ubuntu 11.x中,/bin/sh链接到/bin/dash而不是/bin/bash。
检查链接:
ls -l /bin/sh

如果 /bin/sh 是一个链接到 /bin/dash 的符号链接,将其更改为 /bin/bash。

sudo mv /bin/sh /bin/sh.orig
sudo ln -s /bin/bash /bin/sh

11
你应该使用 dpkg-reconfigure dash 命令,然后在被问及是否将 dash 设置为默认系统 shell 时选择 no - Jan

2
似乎系统命令“ptraj”无法生成“.pdb”文件/文件。
建议更改以下行以避免忽略可能的错误:
os.system("ptraj "+top +" ptraj_tmp.ptr >/dev/null 2>&1")

替换为:

os.system("ptraj "+top +" ptraj_tmp.ptr")

抱歉,错误发布了。PTRAJ正在运行,但我收到错误消息(sh:语法错误:坏的fd号码)。如何解决这个问题?非常感谢。 - Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接