我试图将外部程序(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)
答案 0 :(得分:0)
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)