gpt4 book ai didi

python - 使用 python 子进程调用处理通配符扩展

转载 作者:行者123 更新时间:2023-12-01 09:30:01 25 4
gpt4 key购买 nike

我正在调用此函数并使用%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'])

最佳答案

使用the Python glob module生成 glob 结果列表,并将其拼接到参数列表中的同一位置,否则 shell 将用关联匹配列表替换 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'])

关于python - 使用 python 子进程调用处理通配符扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50048059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com