pyshell
pyshell 调用外部命令,让你像执行bash一样方便
#!/usr/bin/env python # -*- coding:utf-8 -*- from subprocess import Popen from subprocess import PIPE def py_ver(): ''' 得到python的版本 ''' import sys return sys.version_info[0] _ver = py_ver() if _ver == 2: builtin_str = str bytes = str str = unicode basestring = basestring numeric_types = (int, long, float) elif _ver == 3: builtin_str = str str = str bytes = bytes basestring = (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 t class cmd(object): def __init__(self, *args, **kwargs): self.stdout = None self.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.returncode return self def __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 dd cmd("gnome-terminal -x bash -c 'python -h;read' ")