我正在调用此功能并使用%s*silent
读取具有以下格式名称的文件:name.number.silent.
我从start_model.split('/')[-1].split('.')[0]
获取名称,所以不要担心。
这显然是不正在工作,因为这些命令实际上从未传递给shell。如果我要使用glob,我如何修改我的代码以执行我在下面做的事情?
from subprocess import call
def fragment_score(rosetta_path, silent_input_and_score_output, start_model):
call([rosetta_path,
'-mode score',
'-in::file::silent', '%s/%s*silent' % (silent_input_and_score_output, start_model.split('/')[-1].split('.')[0]),
'-scorefile', '%s/scores1' % silent_input_and_score_output,
'-n_matches', '50'])
答案 0 :(得分:1)
使用the Python glob
module生成一个glob结果列表,并将它拼接到你的参数列表中的相同位置,否则你将使用相关匹配列表替换一个glob表达式:
from subprocess import call
from glob import glob
def fragment_score(rosetta_path, silent_input_and_score_output, start_model):
glob_exp = '%s/%s*silent' % (silent_input_and_score_output, start_model.split('/')[-1].split('.')[0])
glob_results = glob(glob_exp)
call([rosetta_path,
'-mode score',
'-in::file::silent'
] + glob_results + [
'-scorefile', '%s/scores1' % silent_input_and_score_output,
'-n_matches', '50'])
在当前的Python 3.x中,有一种语法可以让它更自然:
call([rosetta_path,
'-mode score',
'-in::file::silent',
*glob_results,
'-scorefile', '%s/scores1' % silent_input_and_score_output,
'-n_matches', '50'])