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