首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash shell命令通过python运行,使其在windows、mac和linux中具有通用性。

bash shell命令通过python运行,使其在windows、mac和linux中具有通用性。
EN

Stack Overflow用户
提问于 2022-08-16 23:44:18
回答 2查看 48关注 0票数 0

我需要通过python运行bash命令,这样才能在pc和mac/linux中实现通用。./bin/production在powershell中不工作,将'bash‘放在前面会产生一个错误,即它不识别'docker’命令

./bin/制作内容:

代码语言:javascript
复制
#!/bin/bash
docker run --rm -it \
    --volume ${PWD}/prime:/app \
    $(docker build -q docker/prime) \
    npm run build

这是python脚本:

代码语言:javascript
复制
import subprocess
from python_on_whales import docker
cmd = docker.run('docker run --rm -it --volume ${PWD}/prime:/app $(docker build -q docker/prime) npm run build')
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out, err = p.communicate()
print(out)

这是运行python脚本时遇到的错误:

python_on_whales.exceptions.NoSuchImage:执行的docker命令是C:\Program Files\Docker\Docker\resources\bin\docker.EXE image inspect docker run --rm -it --volume ${PWD}/prime:/app $(docker build -q docker/prime) npm run build。它与代码1一起返回,stdout的内容是“[]”,stderr的内容是‘来自守护进程的错误响应:没有这样的映像: docker rm -it -卷${PWD}/ -q :/app $(docker -q docker/prime) npm运行构建:无效的引用格式:存储库名称必须是小写’。

运行该命令时,powershell中的长行docker run --rm -it--volume ${PWD}/prime:/app $(docker build -q docker/prime) npm run build可以工作,但我们希望为pc和mac/linux都提供一个通用的标准命令。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-17 00:05:05

Python鲸的docker.run()函数不使用docker run ...命令行。它是一个本地Python,需要将各种Docker选项表示为函数参数。

原则上,您可以使用该API重写这个Python脚本:

代码语言:javascript
复制
from pathlib import Path
from python_on_whales import docker

# build the image, returns an Image object
image = docker.build(Path.cwd() / 'docker' / 'prime')

# start the container; like `docker run ...`
docker.run(image,
           command=['npm', 'run', 'build'],
           volumes=[(Path.cwd() / 'prime', '/app')], # -v $(PWD)/prime:/app
           interactive=True,                         # -i (required?)
           tty=True,                                 # -t (required?)
           remove=True)                              # --rm

来自docker.run()的返回值(不包括detach=True)是容器的stdout,示例print()是数据。

票数 0
EN

Stack Overflow用户

发布于 2022-08-16 23:55:33

这可能不是您想要的,但您可以尝试如下:

代码语言:javascript
复制
import platform
import subprocess
import os

cur_os = platform.system()

if cur_os == "Windows":
    print("You are on windows")
    os.system('Command here') # for windows
elif cur_os == "Darwin":
    print("You are on mac")
    subprocess.call('Command goes here') # for mac

编辑:我是python的中间人,所以不要判断,如果我做错了什么,请给我反馈。谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73381445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档