2012-09-12 33 views
7

Necesito implementar un enlace de precompilación SVN que ejecuta un script que está almacenado en SVN.¿Transmitir STDIN a un script que se está canalizando al intérprete de Python?

que puede utilizar el comando svn cat de tubería que script para el intérprete de Python, de la siguiente manera:

svn cat file://$REPO/trunk/my_script.py | python - --argument1 --argument2 

Sin embargo, my_script.py sí requiere que los datos pueden verter la entrada estándar.

Esa información no se almacena en un archivo; está almacenado en la red. Yo preferiría no tener que descargar los datos en un archivo temporal, ya que normalmente pude tubería a un programa de Python:

curl http://example.com/huge_file.txt | python my_script.py 

No estoy seguro de cómo combinar estos dos tubos.

+0

¿Ha intentado utilizar '>'? –

+0

Escriba un script contenedor que use pysvn para leer en el archivo, luego compile y ejecútelo, ¿así que su stdin es gratis? – agf

Respuesta

10

Descubrí cómo hacer esto sin crear ningún archivo temporal, pero no estrictamente con "pipes".

curl http://example.com/huge_file.txt | python <(svn cat file://$REPO/trunk/my_script.py) --argument1 --argument2

he utilizado el "descriptor de archivo anónimo" construir en Bash, que se puede utilizar en lugar de cualquier ruta del archivo.

E.g. python my_script.py sería equivalente a python <(cat my_script.py)

0

No creo que esto sea posible. Alimenta el script como entrada estándar al intérprete de Python. Esto significa que el intérprete de python ya está conectado a una secuencia de entrada. No creo que el contenido del script pueda crear una segunda entrada estándar para leer.

Cuestiones relacionadas