заполнить команду bash из списка, переданного в качестве аргумента функции - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть список, который передается в качестве аргумента функции. Из этого списка мне нужно заполнить команду bash и выполнить ее

lst = ['test01.gz','test02.gz','test03.gz','newtest01.gz','newtest02.gz','random.gz']

def populate_command(lst):
    cmd = 'cat {} {} > filename.gz'
    subprocess.run(cmd, shell=True, check=True)

Здесь команда cat должна быть заполнена cat test01.gz test02.gz test03.gz > test.gz. Аналогично для newtest01.gz (cat newtest01.gz newtest02.gz > newtest.gz) и ничего не делать, если существует только один .gz файл (random.gz)

Я не могу заполнить команду cat аргументами из списка. Буду признателен за любую помощь

=================================

Отредактированный код

предложил следующее решение, но я думаю, что их слишком много для циклов. Любой другой эффективный способ сделать это

У меня есть список файлов s3_files_list=[''test01.gz','test02.gz','test03.gz','newtest01.gz','newtest02.gz','random.gz'']

, из которого я получаю имена файлов, которые разбиты на несколько файлов, таких как test01, test02 и т. Д.

from typing import List

def find_split_files(temp_list) -> List[str]: main_lst=set()<br> for x in temp_list: if x[:-3][-3:]!='000': main_lst.add(x[:-6]) return main_lst

split_files=find_split_files(s3_files_list)

split_files дает мне ['test', 'newtest']

def files_to_zip(split_files,s3_files_list): main_lst=[] for y in split_files: temp_lst=[] for x in s3_files_list: if x.startswith(y): temp_lst.append(x) main_lst.append(temp_lst)

Main_lst возвращает [['test01.gz', 'test02.gz', 'test03.gz'], ['newtest01.gz', 'newtest02.gz']]

def populate_command(main_lst): for p in main_lst: cmd = 'cat ' for f in p: cmd = cmd + f + ' ' cmd = cmd + ' > ' + f[:-6]+'.gz' print(f'command is {cmd}') subprocess.run(cmd, shell=True, check=True)

1 Ответ

0 голосов
/ 10 ноября 2019

Вы можете перебрать lst с помощью оператора for и построить строку cmd, как показано:

> def populate_command(lst):
>     cmd = 'cat '
>     for f in lst:
>         cmd = cmd + f + ' '
>     cmd = cmd + ' > filename.gz'
>     subprocess.run(cmd, shell=True, check=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...