Article View: es.comp.os.linux.programacion
Article #13136[LARGO] Re: [python] De shell a python
From: Jesús Carrete Montaña
Date: Sun, 18 Mar 2001 13:11
Date: Sun, 18 Mar 2001 13:11
184 lines
6972 bytes
6972 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
>>>>> "Santiago" == Santiago Romero <sromero@escomposlinux.org> writes:
Santiago> Lo que sigue son comandos de ejemplo para pasar a
Santiago> python:
Santiago> echo "aeiou" > fichero echo "mas_aeiou" >> fichero
f=open("fichero","r+") #Abrimos el fichero
f.seek(0,2) #Nos colocamos al final
f.write("aeiou") #escribimos
f.write("mas_aeiou") #seguimos escribiendo
f.close() #cerramos el fichero
Santiago> variable=`grep cadena fichero`
import re #M�dulo de expresiones regulares
#En realidad para buscar una cadena basta el m�dulo string, pero ya
#puestos vamos a buscar una regexp
Regexp=re.compile("^ae{3}i+$")#No es estrictamente necesario compilar,
#pero si acelera bastante el proceso cuando se busca varias veces
f=open("fichero","r") #Abrimos el fichero
Variable=[]
while 1:
Read=f.readline() #Leemos una l�nea por vez
if Read=='': break #Si hay un EOF salimso del bucle
Result=Regexp.search(Read)#Aplicamos la regexp a la l�nea
if Result==None: continue #Pasamos a la siguiente si no coincide
Variable.append(Result.group(0)) #Si coincide a�adimos la l�nea
f.close()#cerramos el fichero
#Ahora Variable tendr� el valor de una lista de las l�neas que coincidieron
Santiago> ficheros=`ls *.c`
import os
Ficheros=os.listdir(".") #Listado del directorio
import re
for Fichero in Ficheros:
if re.search("^.*?\.c$", Fichero)==None: Ficheros.remove(Fichero)
#Hemos eliminado todos los archivos que no sean .c
Santiago> for i in `find . -name "*.c"`; do vim $i; done;
import os
Ficheros=os.listdir(".")
import re
for Fichero in Ficheros:
if re.search("^.*?\.c$", Fichero)==None: Ficheros.remove(Fichero)
#Hasta aqu� como antes
for Fichero in Ficheros:
os.system("emacs "+Fichero)
#Humm... noto una peque�a diferencia, pero d�nde estar�... XD
Aprovecho para decir que existe vim-python, que permite controlar vim
desde python.
Santiago> cat fichero.txt | cut -f 2 -d " "
import string
f=open("fichero","r")
while 1:
Line=f.readline() #podr�amos usar readlines(), pero se puede
#desbordar la memoria
if Line='': break
List=string.split(Line," ")#eparamos los campos
print List[1] #e imprimimos el que deseemos
f.close()
Santiago> if [ -t fichero ]; then echo "Fichero existe"; fi
import os.path
if os.path.exists("fichero"): print "Fichero existe"
Santiago> comando &
import Threading
import os #se pueden importar varios en la misma l�nea, pero no me gusta XD
for Threading import *
NuevoThread=Thread(None,os.system,"NuevoThread",("comando"))
#Llamamos a un nuevo thread para ejecutar el comando
Santiago> # �tal vez exista argc, como en C, para resolver esta? :
Existe sys.argv, y len(sys.argv) es argc :-).
Santiago> if test -z "$*"; then echo "Uso: programa argumento1
Santiago> argumento2"; fi
No s� lo que significa eso en bash, pero supongo que algo como:
import sys
if len(sys.argv) != 3:
print "Uso : "+sys.argv[0]+" argumento1 argumento2"
sys.exit(1)
Santiago> - �C�mo puedo imprimir el valor de una matrix sin hacer
Santiago> un bucle que la recorra? (como en matlab, tal vez no se
Santiago> pueda).
Matriz=[1,2,4,5,6]
print Matriz
�Cu�l es el problema?
Santiago> Esto es todo lo que me viene por ahora a la
Santiago> memoria... :)
Te habr�s quedado descansado XDD
Santiago> El problema es que no s� si debo usar una orden tipo
Santiago> "exec" para ejecutar el comando de shell, o si existen
Santiago> ordenes similares en python que me permitan hacer esas
Santiago> cosas sin darle 2000 vueltas al asunto, si puedo
Santiago> conseguir que una variable de python valga la salida de
Santiago> ese comando (ej var=`ls *.c`), etc.
Tienes todas las opciones. Desde os.system() (igual al
system() de C), pasando por popen() para abrir una pipe, a las
funciones de os y os.path para manejo de archivos. Ya para terminar,
que voy a ganar el premio al mensaje co�azo del mes, te pego un
peque�o ejemplo de script que hice para adecuar los permisos de un
directorio y sus archivos para subirlos a una web:
++++
#!/usr/bin/python
import os
import sys
import os.path
def BajaDir(Directorio):
try:
os.chdir(Directorio)
except OSError:
print Directorio,"- No se pudo abrir el directorio."
Lista=os.listdir(Directorio)
for Fichero in Lista:
if os.path.isdir(Fichero):
Lista2=os.listdir(Fichero)
for Fichero2 in Lista2:
NombreFichero=Fichero+"/"+Fichero2
Lista.append(NombreFichero)
for Fichero in Lista:
CambiaPermisos(Fichero)
def CambiaPermisos(Fichero):
if os.path.isdir(Fichero):
os.chmod(Fichero,0755)
else:
os.chmod(Fichero,0644)
if len(sys.argv) < 2:
print "Debe especificar un directorio."
sys.exit(1)
BajaDir(sys.argv[1])
++++
Un saludo.
P.D.: No he probado los programas, podr�an contener alg�n error accidental,
pero deber�a ser trivial. En cualquier caso si no puedes solucionarlo
avisa. Ah, y tambi�n falta control de errores al abrir archivos y tal,
pero si lo pongo el mensaje se eterniza.
P.D2: Te aconsejo un vistacillo a la tutorial y a la library reference que
cuelgan de /usr/doc/python/html/index.html
- --
"!Dios aleje de nosotros la serenidad de los ignorantes!
�Dios aparte de nosotros la paz de los cobardes!" (De Gasparin)
Jes�s Carrete Monta�a (Kuantiko) <kuantiko@escomposlinux.org>
LRU #158442 -> I use free software. | PGP Key -> pgp.rediris.es
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: Processed by Mailcrypt and GnuPG
iD8DBQE6tLPQfUtQQKOnZ1IRAiXKAJ9mGL3K/6tdzivOHcyt/ajtB6h9LgCfXvvQ
aM8kN0yra6ECDBwd3SJLuVY=
=yZWj
-----END PGP SIGNATURE-----
Technical Details
Message-ID:
<87u24r43yx.fsf@relativistic.homeip.net>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!logbridge.uoregon.edu!fu-berlin.de!uni-berlin.de!106-coru-x9.libre.retevision.ES!not-for-mailReferences:
<bl3299.vc.ln@127.0.0.1>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,4729121b4927b783 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2001-03-18 05:18:02 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!logbridge.uoregon.edu!fu-berlin.de!uni-berlin.de!106-coru-x9.libre.retevision.ES!not-for-mail From: kuantiko@escomposlinux.org (Jesús Carrete Montaña) Newsgroups: es.comp.os.linux.programacion Subject: [LARGO] Re: [python] De shell a python Date: 18 Mar 2001 14:11:02 +0100 Lines: 184 Sender: kuantiko@relativistic.homeip.net Message-ID: <87u24r43yx.fsf@relativistic.homeip.net> References: <bl3299.vc.ln@127.0.0.1> NNTP-Posting-Host: 106-coru-x9.libre.retevision.es (62.83.52.106) Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: fu-berlin.de 984921379 4125081 62.83.52.106 (16 [54696]) User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7