好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

shell和Python生娃了!太牛了!

shell和Python生娃了!太牛了!

诗书塞外 Python程序员

Python和Shell交互是系统管理员绕不过去的坎儿。一般来说,我们会通过Subprocess、Popen或者Command模块执行一条Shell命令或脚本,然后通过返回的标准输出和错误输出来得到结果。这是很教科书的做法,可行但不直观。Pythoner的价值观都是不仅要可行,还要简单直观才好。那有没有一种办法让Python和Shell的代码能够简单直观地融合在一起,各自发挥所长,出色地完成任务?

有, 因为Shell和Python在助产婆lamerman的帮助下,生了一个娃,叫shellpy 。这个小家伙能够实现我们想要的功能。(姓跟了shell,看来shell是爸爸,python是妈妈啊~)

项目地址

https://github测试数据/lamerman/shellpy

使用方法

shellpy的主体是Python,毕竟Python是一门完整的通用语言,而Shell不是。就是说,总体的编码和Python是一样的,想要嵌入Shell命令的时候,在命令前面加一个 ` (Tab上面那个键,一个右点号)。像这样

 
`ls -l` 

或者这样

 
`ls -l 

也可以写多行命令

 
`
echo test > test.txt
cat test.txt
` 

或者一个很长的行

 
`echo This is   a very long   line 

不可缺少的,你也可以获得命令的返回

 
result = `ls -l 

这个结果是一个Result类型或者InteractiveResult类型。我们先从简单的Result开始讲起。你可以这样获取到一个命令的返回码

 
result = `ls -l
print result.returncode 

这样获取标准输入输出的文本

 
result = `ls -l
result_text = result.stdout
result_error = result.stderr 

或者逐行遍历标准输出的文本

 
result = `ls -l
for line in result:
    print line.upper() 

等等。

语法糖

也会有一些语法糖,比如空值判断的语法糖:

 
result = `ls -l
if result:
    print 'Return code for ls -l was 0' 

然后是获取标准输出的语法糖

 
result = `ls -l
print result 

与Python代码集成,以及代码重用

一个shellpy文件内容如下:

 
import os.path

`mkdir /tmp/mydir
os.path.exists('/tmp/mydir') # True 

这很好理解,主体是Python,嵌入shell代码。需要注意的是,这个文件的扩展名不是.py,而是.spy。

shellpy还有包的概念,包的概念和python包的概念是完全一样的,结构如下:

 
ls common/
common.spy  __init__.spy 

唯一的区别就是.py都变成了.spy。这样的包还能够直接被Python引用,就像这样:

 
from common测试数据mon import common_func 

是不是很神奇?

查看更多关于shell和Python生娃了!太牛了!的详细内容...

  阅读:38次