Python: файл работает в командной строке, но не с помощью crontab - PullRequest
3 голосов
/ 11 августа 2010

Итак, у меня есть файл, который выглядит так:

#!/usr/bin/python
import MySQLdb
import subprocess
from subprocess import call
import re

conx = MySQLdb.connect (user = 'root', passwd = '******', db = 'vaxijen_antigens')
cursor = conx.cursor()
cursor.execute('select * from sequence')
row = cursor.fetchall()

f = open('/home/rv/ncbi-blast-2.2.23+/db/vdatabase.fasta', 'w')

for i in row:
    f.write('>'+i[0].strip()+'\n')
    s = re.sub(r'[^\w]','',str(i[1]))
    s = ''.join(s)
    for k in range(0, len(s), 60):
        f.write('%s\n' % (s[k:k+60]))
    f.write('\n')

f.close()

subprocess.call(['formatdb', '-p', 'T', '-i', r'/home/rv/ncbi-blast-2.2.23+/db/vdatabase.fasta'])

Файл не запускается без проблем из командной строки, но когда я пытаюсь запустить его с помощью crontab, я получаю эту ошибку:

  File "/home/rv/ncbi-blast-2.2.23+/db/formatdb.py", line 29, in <module>
    subprocess.call(['formatdb', '-p', 'T', '-i',
r'/home/rv/ncbi-blast-2.2.23+/db/vdatabase.fasta'])
OSError: [Errno 2] No such file or directory

Я не понимаю, файл существует в этом каталоге, я дважды и трижды проверил.Я попытался преобразовать путь к файлу в необработанную строку, следовательно, в нижнем регистре "r" перед путем, но это тоже не помогло.

Ответы [ 2 ]

5 голосов
/ 11 августа 2010

Я подозреваю, что он жалуется на путь к "formatdb" в вашем вызове подпроцесса.Попробуйте изменить это на полный путь:

subprocess.call(['/home/path/formatdb', ...])
3 голосов
/ 11 августа 2010

Демон cron обычно предоставляет только очень ограниченный PATH. Либо поместите более полный PATH в crontab, либо используйте полный путь в коде Python.

...