码迷,mamicode.com
首页 > 编程语言 > 详细

Python subprocess shell 编程规范

时间:2017-03-29 20:16:06      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:编程规范   复杂   err   class   pen   mod   imp   stdout   and   

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

1 a.py
2 `-- b.py
3     `-- ls

a.py

 1 import sys, subprocess
 2 
 3 def exec_cmd(cmd):
 4     """Run shell command"""
 5     p = subprocess.Popen(cmd,stdin = subprocess.PIPE,  6         stdout = subprocess.PIPE,
 7         stderr = subprocess.STDOUT,
 8         shell = True)
 9 
10     log_content = p.communicate()[0]
11 
12     return p.returncode, log_content
13 
14 def main():
15     cmd = "python b.py"
16     cmd_code, cmd_log = exec_cmd(cmd)
17     if not cmd_code == 0:
18         raise Exception(cmd_log)
19 
20 if __name__ == __main__:
21     main()

b.py

 1 import sys, subprocess
 2 
 3 def exec_cmd(cmd):
 4     """Run shell command"""
 5     p = subprocess.Popen(cmd,stdin = subprocess.PIPE,  6         stdout = subprocess.PIPE,
 7         stderr = subprocess.STDOUT,
 8         shell = True)
 9 
10     log_content = p.communicate()[0]
11 
12     return p.returncode, log_content
13 
14 def main():
15     cmd = """ls c.py"""
16     cmd_code, cmd_log = exec_cmd(cmd)
17     if not cmd_code == 0:
18         raise Exception(cmd_log)
19 
20 if __name__ == __main__:
21     main()

运行结果:

 1 waterforestdeiMac:pythonCrawler waterforest$ python a.py 
 2 Traceback (most recent call last):
 3   File "a.py", line 21, in <module>
 4     main()
 5   File "a.py", line 18, in main
 6     raise Exception(cmd_log)
 7 Exception: Traceback (most recent call last):
 8   File "b.py", line 21, in <module>
 9     main()
10   File "b.py", line 18, in main
11     raise Exception(cmd_log)
12 Exception: ls: c.py: No such file or directory
13 
14 
15 waterforestdeiMac:pythonCrawler waterforest$

 

Python subprocess shell 编程规范

标签:编程规范   复杂   err   class   pen   mod   imp   stdout   and   

原文地址:http://www.cnblogs.com/sunfie/p/6641484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!