自动执行多个BASH命令

时间:2019-02-05 07:20:50

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

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

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

cd /somewhere
git pull
npm run build
make deploy

我在Google的任何地方都看到:os.system("xxx")subprocess.call(...)

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

2 个答案:

答案 0 :(得分:0)

本着“不要重新发明轮子”的精神,有很多方法可以使用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

答案 1 :(得分:0)

os.system调用外壳程序并将命令发送到外壳程序,因此您可以轻松地做到这一点:

import os

cmd == """\
cd /somewhere
git pull
npm run build
make deploy
""""

os.system(cmd)

这很容易。我们往往会忘记os.system并没有直接执行命令,而是将命令分派给了shell。因此,我们可以使用重定向和管道。