Запустите внешнюю программу для каждого элемента списка
Я пытаюсь вызвать внешнюю программу (Openbabel) для каждого элемента (молекулы) в списке молекул (формат SMILES). Тем не менее, я продолжаю получать ту же ошибку:
/bin/sh: 1: Syntax error: "(" unexpected (expecting ")").
Что не так с моим кодом?
from subprocess import call
with open('test_zinc.smi') as f:
smiles = [(line.split())[0] for line in f]
def call_obabel(smi):
for mol in smi:
call('(obabel %s -otxt -s %s -at %s -aa)' % ('fda_approved.fs', mol, '5'), shell=True)
call_obabel(smiles)
1 ответ
Решение
subprocess.call
требует повторяющихся команд и аргументов. Если вам нужно передать аргументы командной строки процессу, они принадлежат итерируемым. Также не рекомендуется использовать shell=True
так как это может быть угрозой безопасности. Я опущу это ниже.
Попробуй это:
def call_obabel(smi):
for mol in smi:
cmd = ('obabel', 'fda_approved.fs', '-otxt', '-s', mol, '-at', '5', '-aa')
call(cmd)