Запускать циклические файлы с несколькими командами, запускать следующий файл, когда первая команда выполняет предыдущий файл - PullRequest
0 голосов
/ 09 ноября 2018

Для проекта я создал несколько скриптов Python и хочу запустить их в каталоге файлов в скрипте оболочки. В этом сценарии оболочки я уже создал цикл for с несколькими командами. Первая команда - это скрипт Python, который обрабатывает входной файл в локальной базе данных и занимает большинство ядер. Следующие команды занимают меньше ядер, но занимают много времени. Очень важно, чтобы для каждого файла команды запускались последовательно. Чтобы сэкономить время, я хотел изменить сценарий оболочки для запуска первой команды файла и, когда это будет сделано, для одновременного запуска следующих команд на выходе и первой команды на следующем файле.

Кто-нибудь может мне помочь с этим? Я пытался найти себя, но не могу найти ответ. Я не пробовал запускать этот скрипт, так как я уже запускаю скрипты python без скрипта оболочки.

Пока это скрипт:

#!/bin/bash
tsv=/home/user/tsv
fasta=/home/user/fasta/*
clustering=/home/user/clustering

for file in ${fasta}
do
    python blastn_new.py --fasta ${file} --tsv ${tsv}/${file}.tsv &&
    mkdir ${clustering}/${file} &&
    mkdir ${clustering}/${file}/clusters &&
    python blastparsPB.py --clusters ${clustering}/${file}/${file}.txt --fish ${tsv}/${file}.tsv --dir ${clustering}/${file}/clusters/
done

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете запустить второй скрипт в фоновом режиме.

Следующее также имеет некоторые тангенциальные комментарии и немного переформатирует ваш код.

#!/bin/bash

# You cannot have spaces around the equals signs
# Also, avoid hard-coding an absolute path
tsv=./tsv
db=./newpacbiodb/pacbiodb
clustering=./clustering

# Notice proper quoting throughout
for file in ./fasta/*
do
    python blastn_new.py \
        --fasta "${file}" \
        --tsv "${tsv}/${file}.tsv" &&
    # mkdir -p creates an entire path if necessary
    # (and works fine even if the directory already exists)
    mkdir -p "${clustering}/${file}/clusters" &&
    python blastparsPB.py \
        --clusters "${clustering}/${file}/${file}.txt" \
        --fish "${tsv}/${file}.tsv" \
        --dir "${clustering}/${file}/clusters/" &
done # notice the simple addition of background ^ job

Очевидно, это предполагает, что второму скрипту Python не нравится иметь что-то связанное, например. в базу данных для записи одновременно, но это уже дано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...