python:通过python脚本快速执行 bash 命令
2017-08-03 00:19
531 查看
* git镇楼:
实践出真知。虽然这个脚本代码量不大,但是也是经过3次修改才达到预期效果的。
如何利用
如何像
这两个问题解决了,才算是解决了使用
一一解答:
如何利用
如何像
于是,就有了如下代码 :
于是,执行之后的输出如下:
通过输出可以看到,所有的
git config --global core.filemode false*
实践出真知。虽然这个脚本代码量不大,但是也是经过3次修改才达到预期效果的。
* 第一次写的时候,凭逻辑认为代码是正确的,可以达到预期效果。但是拿到服务器上运行发现有问题 * 第二次,在本地简单模拟了服务器的目录结构,测试通过了。但是拿到服务器运行,发现依然没有达到预期效果。 * 第三次,为了让代码能正确执行,并达到预期效果。在代码中输出了当前执行路径,并在服务器上验证通过了。
如何利用
python执行
bash脚本?
如何像
cd xxx/一样任性跳转目录执行
bash命令?
这两个问题解决了,才算是解决了使用
python脚本执行
bash命令的全部痛点。
一一解答:
如何利用
python执行
bash脚本?
os.popen(bash_comand)即可
如何像
cd xxx/一样任性跳转目录执行
bash命令?
os.chdir(path)就如同
cd xxx/一般,可以任性地切换到任意目录
于是,就有了如下代码 :
#!/usr/bin/env python # -*- coding: utf-8 -*- # @name : find_t.py # @author : cat # @date : 2017/8/2. import os import time def bash_shell(bash_command): """ python 中执行 bash 命令 :param bash_command: :return: bash 命令执行后的控制台输出 """ try: return os.popen(bash_command).read().strip() except: return None def find_target(target_path="./../", key='.git'): """ 查找目标目录所在的目录 : 如 /aa/bb/.git --> return /aa/bb/ :param target_path: :param key: target :return: """ walk = os.walk(target_path) for super_dir, dir_names, file_names in walk: for dir_name in dir_names: if dir_name == key: dir_full_path = os.path.join(super_dir, dir_name) # print(dir_full_path, super_dir, dir_name, sep=" ## ") yield super_dir if __name__ == '__main__': print("start execute bash ...........") st = time.time() cwd = os.getcwd() # this for repo for repo_path in find_target(os.getcwd(), key='.repo'): os.chdir(repo_path) if repo_path == os.getcwd(): print('find repo in -->', repo_path) print(bash_shell('pwd')) print(bash_shell('repo forall -c git config core.fileMode false --replace-all')) else: print('error in chdir 2 {}'.format(repo_path)) if os.getcwd() != cwd: os.chdir(cwd) if os.getcwd() != cwd: print('change 2 cwd FAIL !!! {}'.format(cwd)) # this for git for git_path in find_target(os.getcwd(), key='.git'): os.chdir(git_path) if git_path == os.getcwd(): print('find git in -->', git_path) print(bash_shell('pwd')) print(bash_shell('git config --global core.filemode false')) else: print('error in chdir 2 {}'.format(git_path)) if os.getcwd() != cwd: os.chdir(cwd) if os.getcwd() != cwd: print('change 2 cwd FAIL !!! {}'.format(cwd)) et = time.time() print('\n\n #### execute finished in {:.3f} seconds ####'.format(et - st)) print('\n') # test for bash_command # print(bash_shell('git init')) # print(bash_shell('ls -al'))
于是,执行之后的输出如下:
bash_command = pwd /Users/cat/Desktop/testGit/a6 bash_command = pwd /Users/cat/Desktop/testGit/a6/frameworks/base bash_command = pwd /Users/cat/Desktop/testGit/a6/packages/apps/Email bash_command = pwd /Users/cat/Desktop/testGit/a6/packages/apps/Music bash_command = pwd /Users/cat/Desktop/testGit/a6/packages/apps/Settings bash_command = pwd /Users/cat/Desktop/testGit/a6/vender/customer spend time : 0.096 seconds end #################### end Process finished with exit code 0
通过输出可以看到,所有的
.repo以及
.git目录所在目录是已经找出来了。然后执行
bash_commad(command)即可在仓库目录执行
git / repo命令了。
相关文章推荐
- PHP通过系统命令执行Python脚本
- 使用Perl或者Python加载Praat脚本在DOS命令窗口直接执行
- bash的多命令执行,shell脚本基础及grep系
- python脚本中获得执行终端命令返回的内容
- Python+selenium创建自动执行命令脚本
- Python脚本之django---mysql-记录主机性能数据到数据库-web站点管理数据库及web显示命令执行结果
- Python脚本远程批量执行命令
- 在Linux Bash通过上下键快速查找历史命令
- Python脚本中执行shell命令
- python通过getopt模块获取执行命令参数
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- 通过STAF Process Service调用Powershell执行命令或脚本
- Bash脚本:命令重复执行指定次数
- 利用python 通过邮件执行系统命令
- 通过winscp实现一键修改多台机器文件,并执行相应命令的脚本
- mysql通过文档读取并执行命令之快速为mysql添加多用户和数据库技巧
- python通过getopt模块如何获取执行的命令参数详解
- python脚本 快速执行mapreduce程序
- 在linux下如何通过expect正确执行自动切换登录,并且执行命令和脚本
- 通过 脚本执行 kettle 的作业 命令