[eside-ghost] pushd en python

altern altern2 en gmail.com
Mar Jun 1 12:59:16 CEST 2010


On Tue, Jun 1, 2010 at 8:46 AM, Saúl Ibarra Corretgé <saghul en gmail.com> wrote:
> 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!

mas que nada lo decia por el pushd que esta mañana no me aclaraba como
traducirlo (lo estoy haciendo a las mañanas en euskotren de camino al
curro).

pero gracias por lo del find que antes o despues me tenia que meter
con ello... de hecho ahora mismo estaba mirandome la documentacion. el
problema es que el script en bash no lo escribi yo, es para un colega
que llevan una distro de linux y querian tener unas herramientas con
GUI para crear un live USB y alguna otra cosa. le prometi que se lo
intentaba pasar a python+pygtk pero esoy muy flojo de bash (lease: no
tengo ni papa)

gracias!


Más información sobre la lista de distribución eside-ghost