Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Pergunta "profunda" sobre o Portage (talvez sobre
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Portuguese
View previous topic :: View next topic  
Author Message
Operador Nabla
Apprentice
Apprentice


Joined: 06 Feb 2004
Posts: 176
Location: Salesópolis - SP - Brasil

PostPosted: Mon May 10, 2004 4:35 pm    Post subject: Pergunta "profunda" sobre o Portage (talvez sobre Reply with quote

Provavelmente essa minha dúvida é mais sobre Python do que sobre o Portage, mas aí vai:

Tanto o Portage como o seu frontend emerge são feitos em Python. Os ebuilds, por outro lado, são essencialmente bash scripts. Então temos programas Python invocando bash scritps... É isso mesmo? Como é possível? Existe alguma biblioteca Python que me permite invocar a shell do sistema?

PS: Eu "passei o olho" rapidamente sobre o código-fonte do emerge. todas as possíveis referências aos ebuilds que eu encontrei pareciam remeter diretamente ao Portage.
Back to top
View user's profile Send private message
pilla
Bodhisattva
Bodhisattva


Joined: 07 Aug 2002
Posts: 7729
Location: Underworld

PostPosted: Mon May 10, 2004 5:43 pm    Post subject: Reply with quote

os ebuilds sao scripts bash?? Acho que nao...
_________________
"I'm just very selective about the reality I choose to accept." -- Calvin
Back to top
View user's profile Send private message
Operador Nabla
Apprentice
Apprentice


Joined: 06 Feb 2004
Posts: 176
Location: Salesópolis - SP - Brasil

PostPosted: Mon May 10, 2004 6:01 pm    Post subject: Reply with quote

Eu diria que eles são bash scripts com "algo mais"... Pelo menos a documentação dos ebuilds do site do Gentoo diz que eles são bash scritps.
Back to top
View user's profile Send private message
fernandotcl
Veteran
Veteran


Joined: 20 Nov 2003
Posts: 1396
Location: Sao Paulo, Brazil

PostPosted: Mon May 10, 2004 10:19 pm    Post subject: Reply with quote

AFAIK são scripts de bash sim, tanto que não é possível remover o bash e deixar o zsh em seu lugar, por exemplo.

Quanto à Python, eu vou começar a aprender mais por esses dias, então não posso ter certeza se o emerge realmente tem esse tipo de biblioteca. Se eu tivesse que chutar, diria que o Python poderia executar "/bin/bash <ebuild>". :D
Back to top
View user's profile Send private message
vmc
n00b
n00b


Joined: 30 Mar 2004
Posts: 29
Location: Leiria - PT

PostPosted: Mon May 10, 2004 10:33 pm    Post subject: Reply with quote

A própria documentação do gentoo diz que os .ebuilds são scripts bash:

Quote:
Ebuild scripts are the basis for the entire portage system. They contain all the information required to download, unpack, compile and install a set of sources, as well as how to perform any optional pre/post install/removal or configuration steps. While most of Portage is written in Python, the ebuild scripts themselves are written in bash, since using bash allows us to call commands as we would from the command-line. One of the important design principles behind ebuild scripts is to have the commands therein be analogs of those one would type on the command-line if installing the package manually. For this purpose, using bash syntax is a very good thing.

_________________
Full-working gentoo installation on Toshiba Satellite M30 - 204
[Centrino 1.6 + nVidia Fx 5200 64MB]
Back to top
View user's profile Send private message
pilla
Bodhisattva
Bodhisattva


Joined: 07 Aug 2002
Posts: 7729
Location: Underworld

PostPosted: Mon May 10, 2004 11:21 pm    Post subject: Reply with quote

I stand corrected :)
_________________
"I'm just very selective about the reality I choose to accept." -- Calvin
Back to top
View user's profile Send private message
RoadRunner
Bodhisattva
Bodhisattva


Joined: 12 Jun 2002
Posts: 490
Location: Coimbra, Portugal

PostPosted: Tue May 11, 2004 1:20 am    Post subject: Reply with quote

As ebuilds são defacto bash scripts. em relação ao python, uma das formas de executar comandos do sistema é usando o módulo commands. Por exemplo, para saber qual o output de um ifconfig, ou de outro comando que queremos que seja executado no sistema e guardar o output basta usar:
Code:

import commands

print (commands.getoutput("/sbin/ifconfig"))
Back to top
View user's profile Send private message
alfmatos
n00b
n00b


Joined: 20 Sep 2003
Posts: 45
Location: Aveiro, Portugal

PostPosted: Fri May 14, 2004 3:00 pm    Post subject: Reply with quote

RoadRunner wrote:
As ebuilds são defacto bash scripts. em relação ao python, uma das formas de executar comandos do sistema é usando o módulo commands. Por exemplo, para saber qual o output de um ifconfig, ou de outro comando que queremos que seja executado no sistema e guardar o output basta usar:
Code:

import commands

print (commands.getoutput("/sbin/ifconfig"))


E depois o python tem boas tools para fazer o parse dos outpus ou é a base de regexp's ?
_________________
alfmatos a.k.a. shepard
Back to top
View user's profile Send private message
RoadRunner
Bodhisattva
Bodhisattva


Joined: 12 Jun 2002
Posts: 490
Location: Coimbra, Portugal

PostPosted: Fri May 14, 2004 3:37 pm    Post subject: Reply with quote

Não tem boas, tem excelentes =) podes pegar na string do output e fazer o que quiseres com ela. Podes tratar o output como se fosse um ficheiro e ler linha a linha, etc. Podes converter a string num array de tokens da string, etc.
Back to top
View user's profile Send private message
Operador Nabla
Apprentice
Apprentice


Joined: 06 Feb 2004
Posts: 176
Location: Salesópolis - SP - Brasil

PostPosted: Mon May 17, 2004 4:28 pm    Post subject: Reply with quote

Estou fazendo alguns testes de integração do Python com a shell, mas ainda estou perdido com a manipulação de shell scripts.

Por exemplo, eu consigo capturar o valor das variáveis de ambiente da bash, mas ainda estou quebrando a cabeça para capturar o valor de uma variável dentro do escopo de um bash script.

Eu já consegui (embora não do jeito que eu gostaria) invocar funções definidas em bash scripts a partir do Python (usando um outro bash script que recebe o nome da função como argumento, dá um source no script com a função e a executa). Eu também já li e reli o código-fonte do portage, do emerge e do ebuild[.py], mas ainda não consegui descobrir como é feito o tratamento dos ebuilds (mas tenho a impressão de que a invocação das funções é similar ao processo que eu descrevi acima).
Back to top
View user's profile Send private message
Operador Nabla
Apprentice
Apprentice


Joined: 06 Feb 2004
Posts: 176
Location: Salesópolis - SP - Brasil

PostPosted: Tue May 25, 2004 3:50 pm    Post subject: Reply with quote

Consegui desenvolver uma maneira de acessar o conteúdo de shell scripts usando a instrução commands.getoutput(). Para resgatar o valor de uma variável em um shell script, eu uso o comando:
Code:
source <script> && echo $<variavel>

e, para invocar uma função definida em um shell script, eu uso:
Code:
source <script> && <funcao>


Por que eu não pensei nisso antes?
Back to top
View user's profile Send private message
To
Veteran
Veteran


Joined: 12 Apr 2003
Posts: 1145
Location: Coimbra, Portugal

PostPosted: Thu May 27, 2004 8:25 am    Post subject: Reply with quote

Operador Nabla wrote:
Por que eu não pensei nisso antes?


Eu pergunto-me é pq é que tu te lembras-te disso :lol:


_________________

------------------------------------------------
Linux Gandalf 3.2.35-grsec
Gentoo Base System version 2.2
------------------------------------------------
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Portuguese All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum