Не удается выполнить поиск с помощью os.system - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь выполнить следующую команду через мой скрипт на python, чтобы разархивировать кучу csv.gz файлов

os.system("find /upload/ -name '*.csv.gz' -print -exec gzip -d {} \") <- Syntax error : EOL while scanning string literal.

#When I try to escape it

os.system("find /upload/ -name '*.csv.gz' -print -exec gzip -d {} \\") <- find: missing parameter for « -exec »

Как я могу выполнить find /upload/ -name '*.csv.gz' -print -exec gzip -d {} \ через os.system?

Есть ли альтернатива os.system("find /upload/ -name '*.csv.gz' -print0 | xargs -0 -n1 gzip -d"), которую я мог бы использовать?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Отсутствие использования оболочки на самом деле является упрощением, если вы понимаете, что делаете. Вы должны добавить пропущенную точку с запятой, как уже упоминалось в другом ответе.

import subprocess

subprocess.run([
    'find', '/upload/', '-name', '*.csv.gz', '-print',
    '-exec', 'gzip', '-d', '{}', ';'], check=True)

Возможно, смотрите также Запуск команд Bash в Python

0 голосов
/ 01 октября 2019

Вам нужна точка с запятой:

os.system("find /upload/ -name '*.csv.gz' -print -exec gzip -d {} \\;")

...