Erro ao usar os parênteses no código [RESOLVIDO]

1. Erro ao usar os parênteses no código [RESOLVIDO]

Adriano Christi
ACMM

(usa Ubuntu)

Enviado em 05/09/2021 - 13:18h

Pessoal, bom dia.
Eu tenho esse trecho de código que lista os aplicativos .deb instalados em uma máquina com Linux e guarda na vvariável deb

deb = os.popen("comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)").read( ).strip( ).split( ) 


o problema é que quando eu tento usar essa lista no resto do código aparece essa mensagem:

/bin/sh: 1: Syntax error: "(" unexpected 


Onde diz que acontece um erro de sintaxe por haver um "(" no trecho de código.

Tentei colocar "\" antes dos parênteses e fica assim:

/bin/sh: 1: cannot open (apt-mark: No such file
sort: invalid option -- ')'
Try 'sort --help' for more information.
/bin/sh: 1: cannot open (gzip: No such file
[]
SE DESEJA DESINSTALAR MAIS DE UM APLICATIVO, DIGITE
CADA NÚMERO CORRESPONDENTE SEPARADO APENAS POR ESPAÇO

0 - VOLTAR
>


Dessa outra forma:

from subprocess import getoutput

deb = getoutput("comm -23 <\(apt-mark showmanual | sort -u\) <\(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u\)").strip( ).split( )


Com "\" antes dos parênteses e a saída fica assim:

['/bin/sh:', '1:', 'cannot', 'open', '(apt-mark:', 'No', 'such', 'file', 'sort:', 'invalid', 'option', '--', "')'", 'Try', "'sort", "--help'", 'for', 'more', 'information.', '/bin/sh:', '1:', 'cannot', 'open', '(gzip:', 'No', 'such', 'file']
SE DESEJA DESINSTALAR MAIS DE UM APLICATIVO, DIGITE
CADA NÚMERO CORRESPONDENTE SEPARADO APENAS POR ESPAÇO

1 - /bin/sh:
2 - 1:
3 - cannot
4 - open
5 - (apt-mark:
6 - No
7 - such
8 - file
9 - sort:
10 - invalid
11 - option
12 - --
13 - ')'
14 - Try
15 - 'sort
16 - --help'
17 - for
18 - more
19 - information.
20 - /bin/sh:
21 - 1:
22 - cannot
23 - open
24 - (gzip:
25 - No
26 - such
27 - file
0 - VOLTAR


Como eu consigo resolver isso?


  


2. Re: Erro ao usar os parênteses no código [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 05/09/2021 - 13:28h

Tenta digitar o comando no terminal diretamente e depois passa para o interpretador Python. Além disso procure usar boas práticas quando digitando comandos em shell, por exemplo, o uso de:
${comando} 

Te livrará de várias dores de cabeça no seu código.

O problema está no comando e não no interpretador Python.


3. Re: Erro ao usar os parênteses no código [RESOLVIDO]

Adriano Christi
ACMM

(usa Ubuntu)

Enviado em 05/09/2021 - 13:42h


ctw6av escreveu:

Tenta digitar o comando no terminal diretamente e depois passa para o interpretador Python. Além disso procure usar boas práticas quando digitando comandos em shell, por exemplo, o uso de:
${comando} 

Te livrará de várias dores de cabeça no seu código.

O problema está no comando e não no interpretador Python.


Não sei se entendi direito, mas no terminal está funcionando, o problema é na hora de passar a saída desse comando do shell pro Python que da essa mensagem de erro.

Guns don't kill people. People kill people.


4. Re: Erro ao usar os parênteses no código [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 05/09/2021 - 14:29h

E ae ctw6av, fazia tempos que não te via por aqui. Mais um que não larga o VOL hahaha


5. Re: Erro ao usar os parênteses no código [RESOLVIDO]

Adriano Christi
ACMM

(usa Ubuntu)

Enviado em 06/09/2021 - 14:00h

Eu consegui um comando que "bateu na trave" e eu tive que tratar ele no Python pra fazer o que eu preciso.
Ficou assim:
import os

inst = os.popen("cat /var/log/apt/history.log | awk '{if ($3==\"install\" ) {print substr($0,index($0,$4))}}'").read( ).strip( ).split( )
excpt = ['--upgrade', 'update', '--no-install-recommends']
deb = list(set([x for x in inst if (len(x) > 2) and (not x in excpt)]))

Pelo menos, dá pra listar somente os aplicativos instalados pelo usuario. Dessa forma o resto do programa vai sair.
Mas, de qualquer forma, valeu pela ajuda e paciência.

Guns don't kill people. People kill people.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts