使用subprocess通过shell调用另一个模块组件时,需要对返回的code进行判断。判断结果为执行失败时需要raise Exception,不然调用树过于复杂时,我们很难跟踪到异常发生的位置。sys.exit(1)虽然也可以达到对执行结果进行判断的目的,但是它难于追踪异常发生的位置。

 a.py
`-- b.py
`-- ls

a.py

 import sys, subprocess

 def exec_cmd(cmd):
"""Run shell command"""
p = subprocess.Popen(cmd,stdin = subprocess.PIPE, \
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT,
shell = True) log_content = p.communicate()[0] return p.returncode, log_content def main():
cmd = "python b.py"
cmd_code, cmd_log = exec_cmd(cmd)
if not cmd_code == 0:
raise Exception(cmd_log) if __name__ == '__main__':
main()

b.py

 import sys, subprocess

 def exec_cmd(cmd):
"""Run shell command"""
p = subprocess.Popen(cmd,stdin = subprocess.PIPE, \
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT,
shell = True) log_content = p.communicate()[0] return p.returncode, log_content def main():
cmd = """ls c.py"""
cmd_code, cmd_log = exec_cmd(cmd)
if not cmd_code == 0:
raise Exception(cmd_log) if __name__ == '__main__':
main()

运行结果:

 waterforestdeiMac:pythonCrawler waterforest$ python a.py
Traceback (most recent call last):
File "a.py", line 21, in <module>
main()
File "a.py", line 18, in main
raise Exception(cmd_log)
Exception: Traceback (most recent call last):
File "b.py", line 21, in <module>
main()
File "b.py", line 18, in main
raise Exception(cmd_log)
Exception: ls: c.py: No such file or directory waterforestdeiMac:pythonCrawler waterforest$

Python subprocess shell 编程规范的更多相关文章

  1. 01 shell编程规范与变量

    前言: 大家对shell脚本应该都不算陌生了,如果突然问你什么是shell脚本?是干什么用的?由什么组成以及怎么使用?变量的概念是什么?作用范围是什么?变量间的算术运算怎么表示?你能很容易答出来吗 本 ...

  2. Python 浅谈编程规范和软件开发目录规范的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...

  3. SHELL编程规范与变量

    shell相比标准开发语言比如JAVA,C,C++来说还是比较简单的,其实就是一堆命令的集合而已,初学者从简单的shell脚本学起,至于shell编程还是要有编程思想在里面,因此,循序渐进很重要,先研 ...

  4. python浅谈编程规范和软件开发目录规范的重要性

    前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...

  5. shell编程规范:引用

    Shell代码规范 作 者: 毕小朋 用 途: 规范Shell代码书写,方便查看与修改 博 客: http://blog.csdn.net/wirelessqa 参 考: http://www.ohl ...

  6. Shell编程规范:Don't use ls | grep

    目录 一.背景 二.ShellCheck的规范 三.修改写法 1.ls | grep file 2.ls | grep regexp 3.ls | grep -v multi 四.最后 五.参考 一. ...

  7. shell编程规范

    1 脚本名以.sh结尾,名称尽量见名之意,比如ClearLog.sh Clear_Log.sh clearlog.sh SerRestart.sh Ser_Restart.sh;2 尽量使用UTF-8 ...

  8. Shell脚本之编程规范和变量

    Shell脚本编程规划和变量 1.Shell脚本概述 2.Shell编程规划 3.重定向与管道 4.Shell脚本变量 1.Shell脚本概述 Shell的作用:充当"翻译官"的角 ...

  9. Shell编程-01-Shell脚本初步入门

    目录 什么是Shell 什么是Shell脚本 Shell脚本语言的种类 常用操作系统默认Shell Shell 脚本的建立和执行 脚本规范 什么是Shell     简单来说Shell其实就是一个命令 ...

随机推荐

  1. Idea创建sbt项目

    这篇文章开始演示如何使用sbt新建项目. 1. 新建,选择Scala,SBT 填写项目名称,Scala版本号等信息. 单击完成后,后台会一直处于下载依赖文件的状态,等吧.. 最终后台运行完成后的完整目 ...

  2. linux rename 和?????

    [root@ob2 mytmp]# ls01.txt  02.txt  03.txt  aa2.txt  aa.sh  aa.txt  tp_2017-09-143516.tar.gz  tt [ro ...

  3. Java-ThreadLocal,Java中特殊的线程绑定机制

    在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个 ...

  4. 用javascript将数据导入Excel

    网上收集的代码 <input type="button" name="out_excel" onclick="AutomateExcel();& ...

  5. TensorFlow基础笔记(11) conv2D函数

    #链接:http://www.jianshu.com/p/a70c1d931395 import tensorflow as tf import tensorflow.contrib.slim as ...

  6. ubuntu 系统网络突然"网络已禁用"

    sudo service network-manager stop  sudo rm /var/lib/NetworkManager/NetworkManager.state  sudo servic ...

  7. [精]Odoo 8.0深入浅出开发教程-模块开发基础

    參考资料点击这里. 构建Odoo模块 模块组成 业务对象 业务对象声明为Python类, 由Odoo自己主动加载. 数据文件 XML或CSV文件格式, 在当中声明了元数据(视图或工作流).配置数据(模 ...

  8. 【Mongo】数据备份与还原

    http://blog.51yip.com/nosql/1573.html mongorestore -d 数据库名 -c 集合名 --drop **.bson

  9. jquery注册文本框获取焦点清空,失去焦点赋值的简单实例

    在我们开发过程中特别是用户注册时会有一个效果,就是文本框获取焦点清空提示,如果用户没有输入信息失去焦点赋值上我们的提示语.   <html> <head> <meta h ...

  10. 笔记本怎么设置WIfi热点

    随着手机的发展,流量的消耗也是大大地增加.虽然很多手机支持wifi,但是不加密或者知道密码的wifi热点却寥寥无几.笔记本的无线网卡显出神通了.那么,如何在笔记本上建立wifi热点呢? 工具/原料 一 ...