Python脚本编写 - 如何执行Linux命令?

我需要做一些文件复制、移动、svn检出命令、目录检查等操作,所以我想写一个脚本来帮我完成。我了解基本的Python语法,但不确定如何使用Python执行Linux命令。 我知道需要使用的Linux命令,例如sudo apt-get install subversion,只是不知道如何在Python中使用它。
具体来说,有人可以给出以下示例吗:
- 检查某个软件包(如svn)是否已安装,如果没有安装,则进行安装。我知道这是一个简单的if语句,但不知道如何编写它... - 检查是否已安装具有特定名称的文件夹,如果没有,则在桌面或其他目录上创建它。类似于上面的问题,我会假设是这样的。 - 进入特定目录并执行命令(例如,我想在特定目录中解压一个.tgz文件)
还有其他问题,但我想掌握基本原理,并真正学会如何使用Python脚本执行Linux命令。谢谢您的时间~
编辑:我特别要求使用Python。

有没有特定的原因选择用Python来做这个?我问这个是因为听起来Bash更适合这三个具体的任务。 - Mendhak
同意,使用bash可能更好。如果你决心要使用Python,可以参考http://stackoverflow.com/questions/89228/calling-an-external-command-in-python。 - muru
我的经理希望我学习Python而不是使用Bash,我是一个新手实习生。 - user114638
Google Python classes - 看起来是一个不错的开始。 - Hannu
1个回答

你肯定可以使用Python的内置模块ossubprocess来完成所有的任务。
稍微棘手的是,如果你希望你的脚本与调用的程序进行“交互”(比如“等待直到它打印出'按Enter键继续',然后发送一个Enter键的按下事件) - 对于这个你可以使用pexpect 模块。
对于稍微高级一点的方式,可以看看Fabric库 - 除了在本地运行命令外,它还可以通过SSH轻松地在远程机器上执行代码。
以下是使用Fabric的一个简单代码示例:
if "dirty" in api.local("git describe --dirty", capture=True):
    print colors.red("""Your repository is dirty, commit any changes first""")
    sys.exit(1)

读起来几乎像诗歌:) 在Bash中类似的代码看起来就像晦涩难懂的混乱...