Me gustaría escribir algunos scripts en python que realicen algunos cambios automáticos en el código fuente. Si la secuencia de comandos determina que necesita cambiar el archivo, me gustaría comprobarlo por primera vez. No me importa registrarme porque siempre querré construir y probar primero.¿Cómo puedo consultar un archivo forzosamente en python?
Respuesta
Perforce tiene envolturas de Python alrededor de sus herramientas de C/C++, disponible en formato binario para Windows, y fuente para otras plataformas:
http://www.perforce.com/perforce/loadsupp.html#api
Usted se encuentre la documentación de la API de secuencias de comandos para ser útil:
http://www.perforce.com/perforce/doc.current/manuals/p4script/p4script.pdf
el uso de la API de Python es bastante similar al cliente de línea de comandos:
PythonWin 2.5.1 (r251:54863, May 1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32.
Portions Copyright 1994-2006 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
>>> import P4
>>> p4 = P4.P4()
>>> p4.connect() # connect to the default server, with the default clientspec
>>> desc = {"Description": "My new changelist description",
... "Change": "new"
... }
>>> p4.input = desc
>>> p4.run("changelist", "-i")
['Change 2579505 created.']
>>>
voy a verificarlo desde la línea de comandos:
P:\>p4 changelist -o 2579505
# A Perforce Change Specification.
#
# Change: The change number. 'new' on a new changelist.
# Date: The date this specification was last modified.
# Client: The client on which the changelist was created. Read-only.
# User: The user who created the changelist.
# Status: Either 'pending' or 'submitted'. Read-only.
# Description: Comments about the changelist. Required.
# Jobs: What opened jobs are to be closed by this changelist.
# You may delete jobs from this list. (New changelists only.)
# Files: What opened files from the default changelist are to be added
# to this changelist. You may delete files from this list.
# (New changelists only.)
Change: 2579505
Date: 2008/10/08 13:57:02
Client: MYCOMPUTER-DT
User: myusername
Status: pending
Description:
My new changelist description
Esto es lo que ocurrió:
import os
def CreateNewChangeList(description):
"Create a new changelist and returns the changelist number as a string"
p4in, p4out = os.popen2("p4 changelist -i")
p4in.write("change: new\n")
p4in.write("description: " + description)
p4in.close()
changelist = p4out.readline().split()[1]
return changelist
def OpenFileForEdit(file, changelist = ""):
"Open a file for edit, if a changelist is passed in then open it in that list"
cmd = "p4 edit "
if changelist:
cmd += " -c " + changelist + " "
ret = os.popen(cmd + file).readline().strip()
if not ret.endswith("opened for edit"):
print "Couldn't open", file, "for edit:"
print ret
raise ValueError
Parece absurdo utilizar las llamadas a os.popen() cuando puede utilizar la API/herramientas nativas admitidas por Perforce. –
El uso del módulo p4 lo vincula a una versión específica de la API obligatoria de C++ si no recuerdo mal. El uso de la línea de comando es compatible con versiones anteriores, es fácil, y si cambia el comando a p4 -G edit, devolverá los objetos como objetos de diccionario de Python marshalled. – grieve
El uso de la línea de comando p4 también es más fácil de configurar – justinhj
Es posible que desee comprobar hacia fuera el módulo P4Python. Está disponible en el sitio forzado y hace las cosas muy simples.
Perforce's P4 Python module mencionado en otra respuesta es el camino a seguir, pero si la instalación de este módulo no es una opción que puede utilizar la bandera -G para ayudar a analizar la salida p4.exe:
p4 [ options ] command [ arg ... ]
options:
-c client -C charset -d dir -H host -G -L language
-p port -P pass -s -Q charset -u user -x file
The -G flag causes all output (and batch input for form commands
with -i) to be formatted as marshalled Python dictionary objects.
construcción de la fuente p4python requiere descargar y extraer el API P4 recomendado para esa versión. Por ejemplo, si la construcción de la versión de Windows XP x86 de P4Python 2008.2 para ActivePython 2.5:
- descarga y extraer tanto la corrección p4python y p4api
- la setup.cfg para p4python a punto al directorio p4api.
Para abrir archivos para editar (hacer un checkout), en la línea de comandos, ver 'p4 help open'.
Puede ver los archivos sin hacer una lista de cambios si agrega el archivo a la lista de cambios predeterminada, pero es una buena idea hacer primero una lista de cambios.
P4Python actualmente no compila para activepython 2.6 sin visual studio 2008; las librerías proporcionadas están compiladas con 2005 o 2003. Forzar a p4python a construir contra mingw es casi imposible, incluso con pexports de python26.dll y volver a montar/reensamblar los archivos .lib proporcionados en archivos .a.
En ese caso, probablemente prefiera utilizar el subproceso y devolver los resultados de p4 como objetos de pitón estructurados. Puede escribir su propia envoltura de comando que toma una matriz arg, construye y ejecuta los comandos, y devuelve el diccionario de resultados.
Puede intentar cambiar todo, probar y, con éxito, abrir los archivos que son diferentes con algo equivalente a 'p4 diff -se // ...'
Recuerde chicos para instalar el paquete de desarrollo para Python para el p4api o se quejará de los encabezados que faltan. En Ubuntu 10.10, acaba de hacer un simple:
apt-get install python2.6-dev
O
apt-get install python3.1-dev
- 1. ¿Cómo puedo dividir un archivo en python?
- 2. ¿Cómo fuerza forzosamente un pergamino mediante UIScrollView?
- 3. cómo enumerar mis cambios archivados en forzosamente?
- 4. cómo determinar los archivos borrados en forzosamente
- 5. Bloquear una rama en forzosamente?
- 6. ¿Puedo consultar un RequestText de un procedimiento en Teradata?
- 7. ¿Cómo puedo contar un archivo desde el directorio en Python?
- 8. ¿Cómo puedo abrir un archivo de Excel en Python?
- 9. ¿Cómo puedo convertir un archivo xml en JSON usando Python?
- 10. ¿Cómo abro automáticamente un archivo para editarlo forzosamente, si estoy escribiendo un archivo de solo lectura en vim?
- 11. ¿Cómo puedo consultar los metadatos del capítulo desde un archivo m4a?
- 12. ¿Cómo puedo consultar mi repositorio de subversión?
- 13. Descargue forzosamente DLL del ensamblado
- 14. ¿Cómo puedo consultar la ruta a un archivo de registro Nlog?
- 15. ¿Cómo puedo consultar un XDocument con una 'ruta'?
- 16. ¿Cómo puedo consultar solo para descendientes directos?
- 17. ¿Cómo puedo escribir un archivo MIDI con Python?
- 18. ¿Puedo transportar un archivo en Vim?
- 19. Cómo mover un archivo en Python
- 20. ¿Cómo puedo crear un archivo yaml de python puro?
- 21. ¿Cómo puedo usar un archivo DLL de Python?
- 22. Consultar archivo HTML con LINQ
- 23. ¿Puedo consultar una lista? Java
- 24. Cómo actualizar un archivo en python egg
- 25. ¿Cómo mostrar un archivo jpg en Python?
- 26. rieles joya rails3-jquery-autocompletar: ¿Cómo puedo consultar varios campos
- 27. ¿Puedo usar un archivo gzip abierto con Popen en Python?
- 28. ¿Cómo puedo convertir un archivo JAR en un archivo EXE?
- 29. ¿Cómo puedo consultar la paleta de componentes Delphi?
- 30. ¿Cómo puedo consultar utilizando una clave externa en MySQL?
estoy poniendo esto aquí para que pueda buscar en el futuro :) –
@ Matt Precio - Creo que es lo que el la característica de pregunta favorita es para :). – swilliams