Попытка избежать shell = True в подпроцессе Python

1

Мне нужно объединить несколько файлов, которые начинаются с одного и того же имени внутри программы Python. Моя идея в оболочке bash была бы чем-то вроде

cat myfiles* > my_final_file

но есть два оператора оболочки: * и >. Это можно легко решить, используя

subprocess.Popen("cat myfiles* > my_final_file", shell=True)

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

Теги:
subprocess
popen

1 ответ

3
Лучший ответ

Вы должны расширить шаблон в python:

import glob
subprocess.check_call(['cat'] + glob.glob("myfiles*"), stdout=open("my_final_file", "wb"))

или лучше делать все в python:

with open("my_final_file", "wb") as output:
    for filename in glob.glob("myfiles*"):
        with open(filename, "rb") as inp:
            output.write(inp.read())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню