Попытка избежать shell = True в подпроцессе Python - PullRequest
0 голосов
/ 24 августа 2018

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

cat myfiles* > my_final_file

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

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

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

1 Ответ

0 голосов
/ 24 августа 2018

Вы должны расширить шаблон в 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())
...