def _showPorts(self, ports, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
if ports:
table = TablePrinter('Port Name', 'Port Interface')
for port in ports.itervalues():
table.append(port['Port Name'], port['Port Interface'])
table.write(f=destfile)
else:
print >>destfile, "None"
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
python类pager()的实例源码
def api(self, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
print >>destfile, "Provides (Input) Ports =============="
self._showPorts(self._providesPortDict, destfile=destfile)
print >>destfile, "\n"
print >>destfile, "Uses (Output) Ports =============="
self._showPorts(self._usesPortDict, destfile=destfile)
print >>destfile, "\n"
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
print >>destfile, 'Allocation Properties ======'
if not self._allocProps:
print >>destfile, 'None'
return
table = TablePrinter('Property Name', '(Data Type)', 'Action')
for prop in self._allocProps:
table.append(prop.clean_name, '('+prop.type+')', prop.action)
if prop.type in ('struct', 'structSeq'):
if prop.type == 'structSeq':
structdef = prop.structDef
else:
structdef = prop
for member in structdef.members.itervalues():
table.append(' '+member.clean_name, member.type)
table.write(f=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, showComponentName=True, showInterfaces=True, showProperties=True, externalPropInfo=None, destfile=None):
'''
Inspect interfaces and properties for the component
'''
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
className = self.__class__.__name__
if showComponentName == True:
print >>destfile, className+" [" + str(self.name) + "]:"
if showInterfaces == True:
PortSupplier.api(self, destfile=destfile)
if showProperties == True and self._properties != None:
PropertySet.api(self, externalPropInfo, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, destfile=None):
"""
Prints application programming interface (API) information and returns.
"""
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
print >>destfile, "Component " + self.__class__.__name__ + " :"
PortSupplier.api(self, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, destfile=None):
'''
Inspect interfaces and properties for the component
'''
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
print >>destfile, "Component [" + str(self._componentName) + "]:"
PortSupplier.api(self, destfile=destfile)
PropertySet.api(self, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def maybePage(lst):
screenSize = getScreenSize()
# be more intelligent about it
doPage = None
if screenSize:
# count the number of lines the text would use up on the screen
# (taking care of lines longer than the terminal width)
doPage = sum( \
map(lambda x: \
sum( map(lambda y: \
int(math.ceil(float(len(y) if len(y) else 1)/float(screenSize[1]))), x.split('\n') \
) \
), lst \
)) > screenSize[0]
if doPage or not screenSize:
pydoc.pager("\n".join(lst))
else:
def p(x):
print x
map(p, lst)
def pager_print(expr, **settings):
"""Prints expr using the pager, in pretty form.
This invokes a pager command using pydoc. Lines are not wrapped
automatically. This routine is meant to be used with a pager that allows
sideways scrolling, like ``less -S``.
Parameters are the same as for ``pretty_print``. If you wish to wrap lines,
pass ``num_columns=None`` to auto-detect the width of the terminal.
"""
from pydoc import pager
from locale import getpreferredencoding
if 'num_columns' not in settings:
settings['num_columns'] = 500000 # disable line wrap
pager(pretty(expr, **settings).encode(getpreferredencoding()))
def pager_print(expr, **settings):
"""Prints expr using the pager, in pretty form.
This invokes a pager command using pydoc. Lines are not wrapped
automatically. This routine is meant to be used with a pager that allows
sideways scrolling, like ``less -S``.
Parameters are the same as for ``pretty_print``. If you wish to wrap lines,
pass ``num_columns=None`` to auto-detect the width of the terminal.
"""
from pydoc import pager
from locale import getpreferredencoding
if 'num_columns' not in settings:
settings['num_columns'] = 500000 # disable line wrap
pager(pretty(expr, **settings).encode(getpreferredencoding()))
def api(self, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
super(DomainDevice,self).api(destfile=destfile)
print >>destfile, '\n'
model.Device.api(self, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
print >>destfile, "Component MessageSink :"
PortSupplier.api(self, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
print >>destfile, "Component MessageSource :"
PortSupplier.api(self, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def api(self, destfile=None):
localdef_dest = False
if destfile == None:
localdef_dest = True
destfile = cStringIO.StringIO()
SandboxResource.api(self, destfile=destfile)
print >>destfile, '\n'
Device.api(self, destfile=destfile)
if localdef_dest:
pydoc.pager(destfile.getvalue())
destfile.close()
def get_blame(filename, start, num_lines, branch):
cmd = "git --no-pager blame -L {start},+{num_lines} {branch} -- {file}"
cmd = cmd.format(start=start, num_lines=num_lines, branch=branch, file=filename)
return run_cmd(cmd)
def get_diff_raw(branch):
cmd = "git --no-pager diff --raw {branch}"
cmd = cmd.format(branch=branch)
return run_cmd(cmd)
def get_file_diff(from_name, to_name, branch):
if to_name:
cmd = "git --no-pager diff {branch} -- {to_name} -- {from_name}"
cmd = cmd.format(branch=branch, from_name=from_name, to_name=to_name)
else:
cmd = "git --no-pager diff {branch} -- {file}"
cmd = cmd.format(branch=branch, file=from_name)
return run_cmd(cmd)
def print_contributer_lines(contributer, diff_infos):
output = []
for diff_info in diff_infos:
lines = diff_info["reviewers"].get(contributer)
if not lines:
continue
shl.print_section(shl.BOLD, diff_info["from_hash"], diff_info["file"], file=output)
prev_line = None
for line in lines:
try:
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import TerminalFormatter
code = highlight(line["code_line"], PythonLexer(), TerminalFormatter())
except ImportError:
code = line["code_line"]
cur_line = int(line["line_num"])
if prev_line and prev_line + 1 < cur_line:
output.append(" .")
output.append(" .")
output.append(" .")
output.append("{line_num: >5}|\t{code_line}".format(line_num=line["line_num"], code_line=code.rstrip()))
prev_line = cur_line
output.append("\n\n")
pydoc.pager("\n".join(output))
def show_project_details(data, width):
doc = doc_generator.generate_doc(data, width)
doc = doc.format(
head='\033[0;33m',
project='\033[1;36m',
command='\033[1;33m',
reset='\033[0m'
)
pydoc.pipepager(doc, cmd='less -R')
# pydoc.pager(doc)
def listScans(self, *args):
pfx = "listScans:"
if not self.msname:
print pfx,"No MS loaded yet"
return None
if not self.scanlist:
print pfx, "No scans (yet) - have you run the 'indexr' task?"
return None
# print list of scan id's + text
lines = "\n".join( map(str, self.scanlist) )
if args and '-p' in args:
pydoc.pager( lines )
else:
print lines
def help():
import pydoc
pydoc.pager(__doc__)
def help():
import pydoc
pydoc.pager(__doc__)
def help():
import pydoc
pydoc.pager(__doc__)
def help():
import pydoc
pydoc.pager(__doc__)
def help(self, request):
if hasattr(request, 'i_am_a_casapy_task'):
pydoc.pager('Help on ' + pydoc.text.bold(request.__name__) + ' task:\n\n' + request.__doc__)
else:
return pydoc.Helper.help(self, request)
def pip_notes():
os.system('cls' if sys.platform == 'win32' else 'clear')
pydoc.pager('''
If installing via PyPi (Python Pip) on Linux then you need to know that VidCutter
depends on the following packages, grouped by distro. Install using your
Linux software packager for a noticeably better integrated experience.
---[Ubuntu/Debian/Mint/etc]--------------------------
python3-dev libmpv1 libmpv-dev python3-pyqt5
python3-pyqt5.qtopengl ffmpeg mediainfo
---[Arch Linux]--------------------------------------
python mpv python-pyqt5 ffmpeg mediainfo
---[Fedora]------------------------------------------
python3-devel mpv-libs mpv-libs-devel python3-qt5
ffmpeg mediainfo
---[openSUSE]----------------------------------------
python3-devel libmpv1 mpv-devel python3-qt5
ffmpeg mediainfo
You need to build a Python extension module before you can run the
app directly from source code. This is done for you automatically by
the package installers but if you wish to simply run the app direct
from source without having to install it (i.e. python3 setup.py install)
you can do so by building the extension module with the following
setuptools command, run from the top-most extracted source code folder:
$ python3 setup.py build_ext -i
And to then run the app directly from source, from the same top-most
source code folder:
$ python3 -m vidcutter
To view all console output for debugging or general interest then
append the debug parameter:
$ python3 -m vidcutter --debug
Make sure you build the extension module AFTER installing the
dependencies covered above, in particular libmpv and the mpv + python3
dev headers are all needed for it to compile successfully. Compiled
extension modules under vidcutter/libs will look like:
mpv.cpython-36m-x86_64-linux-gnu.so [linux]
mpv.cp36-win_amd64.pyd [win32]
Windows users must do all this within a Visual Studio 2015/2017 Native x64/x86
Developer Command Prompt accessible from your Visual Studio program group
via the start menu. It's easier to just grab the prebuilt Windows installers
directly from:
https://github.com/ozmartian/vidcutter/releases/latest
''')