remove the before and after arguments of insert
[PyX.git] / pycompat.py
blob040731637312f1bcb38b47326cc57505cd218bf4
1 # -*- encoding: utf-8 -*-
4 # Copyright (C) 2011-2012 Jörg Lehmann <joergl@users.sourceforge.net>
5 # Copyright (C) 2011-2012 André Wobst <wobsta@users.sourceforge.net>
7 # This file is part of PyX (http://pyx.sourceforge.net/).
9 # PyX is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 2 of the License, or
12 # (at your option) any later version.
14 # PyX is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with PyX; if not, write to the Free Software
21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 class _marker: pass
26 class wait_pipe:
28 def __init__(self, pipe, wait):
29 self.pipe = pipe
30 self.wait = wait
32 def write(self, str):
33 self.pipe.write(str)
35 def close(self):
36 self.pipe.close()
37 self.wait()
40 def popen(cmd, mode="r", bufsize=_marker):
41 try:
42 import subprocess
43 if mode[0] not in "rw" or "r" in mode[1:] or "w" in mode[1:]:
44 raise ValueError("read or write mode expected")
45 if mode[0] == "r":
46 kwargs = {"stdout": subprocess.PIPE}
47 else:
48 kwargs = {"stdin": subprocess.PIPE}
49 if bufsize is not _marker:
50 kwargs["bufsize"] = bufsize
51 pipes = subprocess.Popen(cmd, shell=True, **kwargs)
52 if mode[0] == "r":
53 return pipes.stdout
54 else:
55 return wait_pipe(pipes.stdin, pipes.wait)
56 except ImportError:
57 import os
58 if bufsize is _marker:
59 return os.popen(cmd, mode)
60 else:
61 return os.popen(cmd, mode, bufsize)
63 def popen2(cmd, mode="t", bufsize=_marker):
64 try:
65 import subprocess
66 kwargs = {"stdin": subprocess.PIPE,
67 "stdout": subprocess.PIPE}
68 if bufsize is not _marker:
69 kwargs["bufsize"] = bufsize
70 pipes = subprocess.Popen(cmd, shell=True, **kwargs)
71 return pipes.stdin, pipes.stdout
72 except ImportError:
73 import os
74 if bufsize is _marker:
75 return os.popen2(cmd, mode)
76 else:
77 return os.popen2(cmd, mode, bufsize)
79 def popen4(cmd, mode="t", bufsize=_marker):
80 try:
81 import subprocess
82 kwargs = {"stdin": subprocess.PIPE,
83 "stdout": subprocess.PIPE,
84 "stderr": subprocess.STDOUT}
85 if bufsize is not _marker:
86 kwargs["bufsize"] = bufsize
87 pipes = subprocess.Popen(cmd, shell=True, **kwargs)
88 return pipes.stdin, pipes.stdout
89 except ImportError:
90 import os
91 if bufsize is _marker:
92 return os.popen4(cmd, mode)
93 else:
94 return os.popen4(cmd, mode, bufsize)
96 try:
97 any = any
98 except NameError:
99 def any(iterable):
100 for element in iterable:
101 if element:
102 return True
103 return False
105 try:
106 set = set
107 except NameError:
108 # Python 2.3
109 from sets import Set as set
111 try:
112 sorted = sorted
113 except NameError:
114 # Python 2.3
115 def sorted(l):
116 l = list(l)
117 l.sort()
118 return l