@bergus
2015-12-11T02:33:50.000000Z
字数 1374
阅读 2201
pyshell python shell
pyshell 调用外部命令,让你像执行bash一样方便
#!/usr/bin/env python# -*- coding:utf-8 -*-from subprocess import Popenfrom subprocess import PIPEdef py_ver():'''得到python的版本'''import sysreturn sys.version_info[0]_ver = py_ver()if _ver == 2:builtin_str = strbytes = strstr = unicodebasestring = basestringnumeric_types = (int, long, float)elif _ver == 3:builtin_str = strstr = strbytes = bytesbasestring = (str, bytes)numeric_types = (int, float)else:raise ValueError(u'python 版本不正确')del _ver# 解析字符串中的环境变量def parse_shell_token(t):import os# 将~等用用户的家目录进行替换t = os.path.expanduser(t)# path中可以使用环境变量,'$PATH'...t = os.path.expandvars(t)return tclass cmd(object):def __init__(self, *args, **kwargs):self.stdout = Noneself.cmd(*args, **kwargs)def cmd(self, cmd, env=None, stdout=PIPE):p = Popen(parse_shell_token(cmd), shell=True,stdout=stdout, stdin=PIPE, stderr=PIPE, env=env)self.stdout, self.stderr = p.communicate(input=self.stdout)self.code = p.returncodereturn selfdef __repr__(self):return self.value()def __unicode__(self):return self.value()def __str__(self):return self.value()def __nonzero__(self):return self.__bool__()def __bool__(self):return bool(self.value())def value(self):if not self.stdout:return ''return self.stdout.strip()if __name__ == '__main__':print cmd('ls -al')print cmd("ls | grep 'LICENSE'")print cmd("konsole --hold -e 'konsole --help'")print cmd('ls $HOME')print cmd('ls ~')dd = cmd('ls ~').value().split('\n')print ddcmd("gnome-terminal -x bash -c 'python -h;read' ")
