getstatusoutput

Arnau Sanchez arnau en ehas.org
Jue Oct 5 12:19:53 CEST 2006


Fredy Cabre escribió:

> al llamar con subprocess y el metodo se queda colgado el python, y con
> els subprocess.Popen me da este error:
>>>> Unhandled exception while debugging...
> Traceback (most recent call last):
>   File "C:\Documents and Settings\fredy\Mis documentos\yoquese.py", line
> 3, in <module>
>     p = subprocess.Popen("c:\\windows\\explorer.exe",
> stdout=subprocess.PIPE)
>   File "C:\Python25\lib\subprocess.py", line 586, in __init__
>     errread, errwrite) = self._get_handles(stdin, stdout, stderr)
>   File "C:\Python25\lib\subprocess.py", line 681, in _get_handles
>     p2cread = self._make_inheritable(p2cread)
>   File "C:\Python25\lib\subprocess.py", line 722, in _make_inheritable
>     DUPLICATE_SAME_ACCESS)
> TypeError: an integer is required

No sé, nunca había visto ese error. Yo en tu caso haría algunas pruebas más:

- Ejecutar otro programa más "normal" que explorer.exe, por ejemplo el calc.exe.

- Mirar en otra plataforma, ¿decías que era un PPC, no? prueba en Windows normal 
(sólo por descartar)

- Probar con Python 2.4

- Probar con otra función, por ejemplo os.spawnv:

retcode = os.spawnv(os.P_WAIT, "/usr/bin/xcalc", ["xcalc"])

En este último caso, mirate la documentación, la sintaxis de os.spawnv es algo 
más compleja.

> Por otro lado me gustaría saber como recorrer los archivos de una
> carpeta y mirar si empiezan por 
> una cadena y si se cumple cambiar el nombre y moverlo de sitio, por
> ejemplo
>  
> while not carpeta.fin
>     if fichero.name="pepi*.jpg"
>         rename 'C:\\cosas\\'+fichero.name, 'C:\\frutas\\jose.jpg'
>  

Uff, ese código necesita alguna vuelta más :-) ¿Ya te has mirado el tutorial en 
detalle? excepto, quizá, el capítulo 9 (clases) todo lo demás es absolutamente 
básico:

http://pyspanishdoc.sourceforge.net/tut/tut.html
(http://docs.python.org/tut/tut.html)

También está bien éste:

http://www.rexx.com/~dkuhlman/python_101/python_101.html

En cuanto a lo que preguntas, Juan Carlos propuso una solución muy completa para 
recorrer un directorio recursivamente:

http://listas.aditel.org/archivos/python-es/2006-September/019286.html

Pero si sólo quieres recorrer un directorio concreto es más sencillo. Hay 
muchísimas formas de hacerlo, por ejemplo ésta (en vez de machacar "jose.jpg", 
simplemente lo muevo a "c:\\frutas"):

import glob, shutil

for path in glob.glob("c:\\cosas\\pepi*.jpg"):
	shutil.move(path, "c:\\frutas")




Más información sobre la lista de distribución Python-es