Subprocesso.call () e erro gunzip

2

Estou tentando usar o subprocesso de pacotes do Python em arquivos gunzip e gzip. Estou usando o seguinte comando:

subprocess.call(['gunzip', a_path+myfile_gz], shell=True)

Depois recebo a mensagem de erro:

gzip: compressed data not read from a terminal. Use -f to force decompression.

Então eu digitei:

subprocess.call(['gunzip', '-f', a_path+myfile_gz], shell=True)

E recebo exatamente a mesma mensagem de erro. Se eu digitar shell=False , é pior.

É muito estranho porque se eu fizer isso do meu terminal, tudo funciona bem! Alguém sabe o que há de errado?

    
por AgnesEBC 04.09.2012 / 08:43

1 resposta

2

O problema é que você está passando shell=True , então você está executando

sh -c gunzip /path/to/file.gz

(assumindo a_path+myfile_gz é "/path/to/file.gz" ). Em outras palavras, como o parâmetro shell é True , o primeiro elemento da lista de comandos é um fragmento de shell; os outros argumentos são argumentos para esse fragmento de shell (aqui apenas $0 ). Isso é explicado na documentação .

Se você deixar de fora shell=True , você começará a trabalhar, mas não um bom código. Não manipule caminhos como strings; use as funções no os.path . Esse a_path+myfile_gz provavelmente deve ser os.path.join(a_path, myfile_gz) .

Em qualquer caso, o Python tem suporte interno para gzip . Não use um comando externo.

    
por 05.09.2012 / 02:59

Tags