reconoce - interprete de python
¿Sería Python un buen sustituto de los scripts de línea de comandos/por lotes de Windows? (12)
Tengo algo de experiencia con Bash , que no me importa, pero ahora que estoy haciendo un montón de desarrollo de Windows, necesito hacer cosas básicas / escribir scripts básicos usando el lenguaje de línea de comandos de Windows. Por alguna razón, dicho lenguaje realmente me irrita, así que estaba considerando aprender Python y usar eso en su lugar.
Es Python adecuado para tales cosas? Mover archivos, crear scripts para hacer cosas como descomprimir una copia de seguridad y restaurar una base de datos SQL, etc.
¿Conoces PowerShell ?
Claro, Python es una muy buena opción para esas tareas (estoy seguro de que muchos recomendarán PowerShell en su lugar).
Aquí hay una buena introducción desde ese punto de vista:
http://www.redhatmagazine.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/
EDITAR: Acerca de la preocupación de gnud: http://www.portablepython.com/
Cualquier cosa es un buen reemplazo para el sistema de archivos por lotes en Windows. Perl, Python, Powershell son buenas opciones.
Python es ciertamente muy adecuado para eso. Si vas por ese camino, es posible que también quieras investigar SCons, que es un sistema de compilación construido con Python. Lo bueno es que los scripts de compilación son en realidad scripts de Python completos, por lo que puedes hacer cualquier cosa en el script de construcción que de otro modo pudieras hacer en Python. Hace make
parezca bastante anémico en comparación.
Al volver a leer su pregunta, debería tener en cuenta que SCons es más adecuado para crear proyectos de software que para escribir guiones de mantenimiento del sistema. Pero no dudaría en recomendarle Python en cualquier caso.
@BKB definitivamente tiene una preocupación válida. Aquí hay un par de enlaces que querrá verificar si se encuentra con algún problema que no se puede resolver con la biblioteca estándar:
- Pywin32 es un paquete para trabajar con API win32 de bajo nivel (modificaciones avanzadas al sistema de archivos, interfaces COM, etc.)
- La página Python de Tim Golden : mantiene un paquete contenedor WMI que se basa en Pywin32, pero asegúrese de revisar también su página "Win32 How do I" para obtener detalles sobre cómo lograr las tareas típicas de Windows en Python.
He estado usando muchos archivos de Windows Script últimamente. Más poderoso que los scripts por lotes, y dado que usa scripts de Windows, no hay nada que instalar.
He hecho una buena cantidad de secuencias de comandos en entornos Linux / Unix y Windows, en Python, Perl, archivos por lotes, Bash, etc. Mi consejo es que, si es posible, instale Cygwin y use Bash (suena desde su descripción como instalar un lenguaje de scripting o env no es un problema?). Te sentirás más cómodo con eso ya que la transición es mínima.
Si esa no es una opción, entonces esta es mi opinión. Los archivos por lotes son muy limitados y limitados, pero tienen mucho sentido para tareas simples como ''copiar algunos archivos'' o ''reiniciar este servicio''. Python será más limpio, más fácil de mantener y mucho más poderoso. Sin embargo, la desventaja es que o terminas llamando a aplicaciones externas desde Python con subproceso, popen o similar. De lo contrario, terminas escribiendo un montón de código para hacer cosas que son comparativamente simples en los archivos por lotes, como copiar una carpeta llena de archivos. Mucho de esto depende de lo que estén haciendo tus scripts. El procesamiento de texto / cadena va a ser mucho más limpio en Python, por ejemplo.
Por último, probablemente no sea una alternativa atractiva, pero también podría considerar VBScript como una alternativa. No me gusta trabajar con él como un lenguaje personal, pero si la portabilidad es algún tipo de preocupación, entonces gana en virtud de estar disponible de fábrica en cualquier copia de Windows. Debido a esto, me he encontrado escribiendo guiones que eran poco manejables como archivos por lotes en VBScript, ya que normalmente no puedo depender de que Python o Perl o Bash estén disponibles en Windows.
Por mucho que me guste Python, no creo que sea una buena opción reemplazar las secuencias de comandos básicas de Windows.
No puedo ver que alguien tenga que importar módulos como sys, os o getopt para hacer cosas básicas que puedes hacer con shell, como llamar a un programa, verificar la variable de entorno o un argumento.
Además, en mi experiencia, goto es mucho más fácil de entender para la mayoría de los administradores de sistemas que una llamada a función.
Python, junto con Pywin32 , estaría bien para la automatización de Windows. Sin embargo, VBScript o JScript utilizados con Winows Scripting Host funcionan igual de bien y no requieren de instalación adicional.
Como seguimiento, después de algo de experimentación, lo que he encontrado más útil para Python es cualquier situación que involucre la manipulación de texto (yourStringHere.replace (), expresiones regulares para cosas más complejas) o probar algún concepto básico muy rápido, que es excelente para .
Para cosas como los scripts de restauración SQL DB, encuentro que por lo general solo recurro a archivos por lotes, ya que normalmente es algo lo suficientemente breve como para necesitar más código Python para hacer las llamadas apropiadas del sistema o puedo reutilizar fragmentos de código de otras personas reduciendo el tiempo de escritura lo suficiente como para modificar el código existente para adaptarlo a mis necesidades.
Como apéndice, recomendaría IPython como un gran shell interactivo completo con compleción de pestañas y fácil acceso a docstring.
Resumen
Windows : sin necesidad de pensar, use Python. Unix : las secuencias de comandos rápidas o run-it-once son para Bash, las secuencias de comandos serias y / o de larga duración son para Python.
La gran charla
En un entorno Windows, Python es definitivamente la mejor opción, ya que cmd es malo y PowerShell aún no se ha resuelto. Lo que es más, Python puede ejecutarse en varias plataformas, por lo que es una mejor inversión. Finalmente, Python tiene un gran conjunto de bibliotecas, por lo que casi nunca tocará el muro de "Dios no puedo hacer eso". Esto no es cierto para cmd y PowerShell.
En un entorno Linux, esto es un poco diferente. Muchos trazadores de líneas son más cortos, más rápidos, más eficientes y, a menudo, más legibles en Bash puro. Pero si sabe que su script rápido y sucio se mantendrá por un tiempo o necesitará mejorarse, vaya a Python ya que es mucho más fácil de mantener y ampliar y podrá hacer la mayor parte de la tarea que puede hacer con Herramientas GNU con la biblioteca estándar . Y si no puede, puede llamar a la línea de comandos desde un script de Python.
Y, por supuesto, puede llamar a Python desde el shell usando la opción -c:
python -c "for line in open(''/etc/fstab'') : print line"
Más literatura sobre Python utilizada para las tareas de administración del sistema:
Python es muy adecuado para estas tareas, y creo que es mucho más fácil desarrollar y depurar que los archivos de proceso por lotes de Windows.
La pregunta es, creo, cuán fácil e indolora es asegurar que todas las computadoras en las que tiene que ejecutar estos scripts tengan instalado Python.