【问题标题】:Automate several BASH commands [closed]自动化几个 BASH 命令[关闭]
【发布时间】:2019-06-28 23:26:34
【问题描述】:

任何“正确”的方式来使用 python 自动化构建脚本?

我想让我的脚本做这样的事情:

cd /某处 git 拉 npm 运行构建 进行部署

我在谷歌上看到的所有地方:os.system("xxx")subprocess.call(...)

在 BASH 中,上面很简单,但我想创建一个 cli python 应用程序 为我创造所有这些东西。

【问题讨论】:

  • 可以使用os, shutils, psutils, subprocess等python库
  • 写入一个.sh文件,并通过subprocess执行。
  • 或者,你可以使用os.system直接在Python上执行命令。导入os 并运行os.systems('ls') 以查看结果。
  • @MichaWiedenmann 你会看到我的第一条评论直接谈到了subprocess,坦率地说,我不确定为什么在这种情况下使用os.system 会出错。 ls 命令只是为了让他看到他可以在 Python 上执行 bash 命令。

标签: python python-3.x bash shell automation


【解决方案1】:

本着不重新发明轮子的精神,有很多方法可以使用 python 自动构建,获得免费的东西,例如依赖项管理。

一个有用的工具是doit

为了得到一个想法,这是一个与您的用例类似的非常简单的示例:

import os

MY_PRJ_ROOT='/home/myname/my_project_dir'

def task_cd():
    def cd_to_somewhere():
        os.chdir(MY_PRJ_ROOT)
    return {
        'actions': [cd_to_somewhere]
    }

def task_git_pull():
    """pull my git repo"""
    return {
        'actions': ['git pull'],
    }

def task_build_rust_app():
    """build by awesome rust app"""
    return {
        'actions': ['cargo build']
    }

假设上面是一个名为dodo.py的文件,是doit任务的默认名称,运行如下:

> doit

其他资源

同样值得注意(据我所知,它们并不是 Python 自动化工具的详尽列表):

SCons - a software construction tool

ShutIt - A versatile automation framework

【讨论】:

    【解决方案2】:

    os.system调用shell并将命令发送到shell,这样就可以轻松搞定:

    import os
    
    cmd == """\
    cd /somewhere
    git pull
    npm run build
    make deploy
    """"
    
    os.system(cmd)
    

    这很容易。我们往往会忘记os.system 不直接执行命令,而是将命令分发到 shell。所以我们可以使用重定向和管道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 2012-07-04
      • 2013-01-27
      • 2020-04-04
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多