1

Ejecutando el comando de shell desde el script de Python con \ n

Estoy intentando ejecutar el comando de shell

 echo -e 'FROM busybox\nRUN echo "hello world"' | docker build -t myimage:latest -

desde el cuaderno jupyter usando subprocesos

He probado el codigo

 p = subprocess.Popen('''echo -e 'FROM busybox\nRUN echo "hello world"' | docker build -t myimage:latest - ''', shell=True) p.communicate()

y algunas iteraciones con run () o call (), pero cada vez que la salida es

-e 'DE busybox

Parece que el carácter de nueva línea \ n causa el problema. ¿Alguna idea para solucionar el problema?

Presentada July 18th 2021 por Admin

Respuestas
0

\n en una línea nueva literal. Puede evitarlo utilizando una cadena sin procesar en su lugar,

 p = subprocess.run( r'''echo -e 'FROM busybox\nRUN echo "hello world"' | docker build -t myimage:latest - ''', shell=True, check=True)

pero recomendaría ejecutar un solo proceso y pasar el resultado de Python.

 p = subprocess.run(['docker', 'build', '-t', 'myimage:latest', '-'], input='FROM busybox\nRUN echo "hello world"' , check=True)

Observe también cómo preferimos subprocess.run() sobre el más primitivo subprocess.Popen() ; como se sugiere en la documentación, desea evitar esta función de bajo nivel siempre que pueda. Con check=True también nos ocupamos de propagar cualquier error de subproceso hasta el proceso padre de Python.

Aparte, printf es más versátil y más portátil que echo -e ; En general, le recomendaría que evitara el echo -e completo.

Admin | hace 2 meses



Preguntas relevantes