1

使用 \n 从 python 脚本运行 shell 命令

我正在尝试运行 shell 命令

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

从 jupyter notebook 使用子进程

我试过代码

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

和一些使用 run() 或 call() 的迭代,但每次输出都是

-e '来自busybox

似乎是换行符 \n 导致了问题。任何解决问题的想法?

已提交 July 18th 2021 通過 Admin

答案
0

\n被 Python 解析为文字换行符。您可以通过使用原始字符串来避免这种情况,

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

但我建议运行单个进程并传入 Python 的输出。

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

还要注意我们更喜欢subprocess.run()而不是更原始的subprocess.Popen() ;正如文档中所建议的,您希望尽可能避免使用此低级函数。使用check=True我们还注意将任何子进程错误传播到 Python 父进程。

printf一句, echo -e更通用,更便携;我通常会建议您完全echo -e

Admin | 2个月前



枪支相关