'zip' funciona no shell, mas não no script Python

0

De acordo com esta postagem, estou chamando o comando zip usando os.system() em Python.

Na linha de comando, funciona:

zip -r /Backups/backups/20152011-120209{.zip,}

Quando eu chamo isso de um script Python ( PATH é "/ Backups / backups / 20152011-120209")

os.system("zip -r " + PATH + "{.zip,}")

Ele lança:

zip error: Nothing to do! (/Backups/backups/20152011-122909{.zip,})

O que estou fazendo de errado?

Eu quero zipar um diretório (incluindo seu conteúdo) para um arquivo zip com o mesmo nome no mesmo lugar (um script despeja meus bancos de dados MySQL em arquivos * .sql e eu quero compactar os arquivos depois disso). / p>     

por Benninger 20.11.2015 / 12:09

1 resposta

2

Antes de chegar ao problema, vou citar o comentário de Jacob Vlijm sob esta resposta (obrigado pelo comentário e pelo link):

% bl0ck_qu0te%

Aqui é a primeira (ou uma das primeiras) depreciações proposta, datada de 2010 .

Portanto, você deve usar subprocess.Popen() em vez de os.system() .

Quando você executa os.system() o comando é executado no Dash ( /bin/sh ), enquanto quando você executa o comando em um terminal o comando é executado no Bash ( /bin/bash );

O Dash não suporta expansão de contraventamento e interpreta {.zip,} literalmente;

Execute o comando no Bash: altere

os.system("zip -r " + PATH + "{.zip}")

para

os.system("bash -c 'zip -r " + PATH + "{.zip,}'")

Ou de qualquer maneira, como Darael sugere que o FWIW passe /Backups/backups/20152011-120209{.zip,} para expandir /Backups/backups/20152011-120209 para /Backups/backups/20152011-120209.zip e /Backups/backups/20152011-120209 você pode simplesmente passar os caminhos diretamente evitando gerar outro shell:

os.system("zip -r " + PATH + ".zip " + PATH)
    
por kos 20.11.2015 / 12:15