View previous topic :: View next topic |
Author |
Message |
Operador Nabla Apprentice
Joined: 06 Feb 2004 Posts: 176 Location: Salesópolis - SP - Brasil
|
Posted: Mon May 10, 2004 4:35 pm Post subject: Pergunta "profunda" sobre o Portage (talvez sobre |
|
|
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 |
|
|
pilla Bodhisattva
Joined: 07 Aug 2002 Posts: 7729 Location: Underworld
|
Posted: Mon May 10, 2004 5:43 pm Post subject: |
|
|
os ebuilds sao scripts bash?? Acho que nao... _________________ "I'm just very selective about the reality I choose to accept." -- Calvin |
|
Back to top |
|
|
Operador Nabla Apprentice
Joined: 06 Feb 2004 Posts: 176 Location: Salesópolis - SP - Brasil
|
Posted: Mon May 10, 2004 6:01 pm Post subject: |
|
|
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 |
|
|
fernandotcl Veteran
Joined: 20 Nov 2003 Posts: 1396 Location: Sao Paulo, Brazil
|
Posted: Mon May 10, 2004 10:19 pm Post subject: |
|
|
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>". |
|
Back to top |
|
|
vmc n00b
Joined: 30 Mar 2004 Posts: 29 Location: Leiria - PT
|
Posted: Mon May 10, 2004 10:33 pm Post subject: |
|
|
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 |
|
|
pilla Bodhisattva
Joined: 07 Aug 2002 Posts: 7729 Location: Underworld
|
Posted: Mon May 10, 2004 11:21 pm Post subject: |
|
|
I stand corrected _________________ "I'm just very selective about the reality I choose to accept." -- Calvin |
|
Back to top |
|
|
RoadRunner Bodhisattva
Joined: 12 Jun 2002 Posts: 490 Location: Coimbra, Portugal
|
Posted: Tue May 11, 2004 1:20 am Post subject: |
|
|
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 |
|
|
alfmatos n00b
Joined: 20 Sep 2003 Posts: 45 Location: Aveiro, Portugal
|
Posted: Fri May 14, 2004 3:00 pm Post subject: |
|
|
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 |
|
|
RoadRunner Bodhisattva
Joined: 12 Jun 2002 Posts: 490 Location: Coimbra, Portugal
|
Posted: Fri May 14, 2004 3:37 pm Post subject: |
|
|
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 |
|
|
Operador Nabla Apprentice
Joined: 06 Feb 2004 Posts: 176 Location: Salesópolis - SP - Brasil
|
Posted: Mon May 17, 2004 4:28 pm Post subject: |
|
|
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 |
|
|
Operador Nabla Apprentice
Joined: 06 Feb 2004 Posts: 176 Location: Salesópolis - SP - Brasil
|
Posted: Tue May 25, 2004 3:50 pm Post subject: |
|
|
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 |
|
|
To Veteran
Joined: 12 Apr 2003 Posts: 1145 Location: Coimbra, Portugal
|
Posted: Thu May 27, 2004 8:25 am Post subject: |
|
|
Operador Nabla wrote: | Por que eu não pensei nisso antes? |
Eu pergunto-me é pq é que tu te lembras-te disso
Tó _________________
------------------------------------------------
Linux Gandalf 3.2.35-grsec
Gentoo Base System version 2.2
------------------------------------------------ |
|
Back to top |
|
|
|