[eside-ghost] pushd en python
Saúl Ibarra Corretgé
saghul en gmail.com
Mar Jun 1 08:46:56 CEST 2010
Aupa,
2010/6/1 enrike <altern2 en gmail.com>:
> aupa
>
> estoy traduciendo un script en bash a python y tengo un problema con
> pushd no se si entiendo bien como funciona. este es el trozo que me da
> problemas
>
> pushd ISOMOUNT
> find . | cpio -pdumv DEVMOUNT
> pushd
>
> seria esta la forma correcta en python?
>
> old = os.getcwd()
> os.chdir(ISOMOUNT)
> os.system("find . | cpio -pdumv %s" % (DEVMOUNT))
> os.chdir(old)
>
No conocía el find ., que por lo que veo recorre todo el directorio.
En tal caso seguramente te interese usar os.walk para recorrer todo el
arbol y luego hacer el system.
En caso de que el directorio solo tenga ficheros podrías usar glob.glob.
(Igual hay algún bug, esto lo he escrito en el cliente de correo)
Con os.walk:
for root, dirs, files in os.walk(directory):
for f in [f for f in files if f.endswith('.iso')]:
os.system("cpio-pdumv %s" % f)
Con glob:
for f in glob.glob("*.iso"):
os.system("cpio-pdumv %s" % f)
Otra cosa es que ahora está de moda usar popen del módulo subprocess
en lugar de os.system, había alguna ventaja, como que puedes
comunicarte con el proceso que se spawnea y tal.
def exec_process(cmdline, silent, input=None, **kwargs):
"""Execute a subprocess and returns the returncode, stdout buffer
and stderr buffer.
Optionally prints stdout and stderr while running."""
try:
sub = subprocess.Popen(cmdline, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs)
stdout, stderr = sub.communicate(input=input)
returncode = sub.returncode
if not silent:
sys.stdout.write(stdout)
sys.stderr.write(stderr)
except OSError,e:
if e.errno == 2:
raise RuntimeError('"%s" is not present on this system' %
cmdline[0])
else:
raise
if returncode != 0:
raise RuntimeError('Got return value %d while executing "%s",
stderr output was:\n%s' % (returncode, " ".join(cmdline),
stderr.rstrip("\n")))
return stdout
No se que tal habrá quedado al pegar el asunto aquí... :-S
Hope it helps!
Saludos,
--
/Saúl
http://saghul.net | http://sipdoc.net
Más información sobre la lista de distribución eside-ghost