def main():
parser = argparse.ArgumentParser(prog = 'FBoT', description = 'Foo or Bar over TLS.')
parser.add_argument('-v', '--version', action = 'version', version='%(prog)s ' + version.version)
parser.add_argument('config', help = 'the JSON config file to load', type = argparse.FileType('r'))
with parser.parse_args().config as fp:
config.load(fp)
tcpserver.TCPServer().listen()
python类version()的实例源码
def check_python():
info = sys.version_info
if info[0] == 2 and not info[1] >= 6:
print('Python 2.6+ required')
sys.exit(1)
elif info[0] == 3 and not info[1] >= 3:
print('Python 3.3+ required')
sys.exit(1)
elif info[0] not in [2, 3]:
print('Python version not supported')
sys.exit(1)
def print_shadowsocks():
version_str = ''
try:
import version
version_str = version.version()
except Exception:
pass
print('ShadowsocksR %s' % version_str)
def log_shadowsocks_version():
version_str = ''
try:
import version
version_str = version.version()
except Exception:
pass
logging.info('ShadowsocksR %s' % version_str)
def print_local_help():
print('''usage: sslocal [OPTION]...
A fast tunnel proxy that helps you bypass firewalls.
You can supply configurations via either config file or command line arguments.
Proxy options:
-c CONFIG path to config file
-s SERVER_ADDR server address
-p SERVER_PORT server port, default: 8388
-b LOCAL_ADDR local binding address, default: 127.0.0.1
-l LOCAL_PORT local port, default: 1080
-k PASSWORD password
-m METHOD encryption method, default: aes-256-cfb
-o OBFS obfsplugin, default: http_simple
-t TIMEOUT timeout in seconds, default: 300
--fast-open use TCP_FASTOPEN, requires Linux 3.7+
General options:
-h, --help show this help message and exit
-d start/stop/restart daemon mode
--pid-file PID_FILE pid file for daemon mode
--log-file LOG_FILE log file for daemon mode
--user USER username to run as
-v, -vv verbose mode
-q, -qq quiet mode, only show warnings/errors
--version show version information
Online help: <https://github.com/shadowsocks/shadowsocks>
''')
def print_server_help():
print('''usage: ssserver [OPTION]...
A fast tunnel proxy that helps you bypass firewalls.
You can supply configurations via either config file or command line arguments.
Proxy options:
-c CONFIG path to config file
-s SERVER_ADDR server address, default: 0.0.0.0
-p SERVER_PORT server port, default: 8388
-k PASSWORD password
-m METHOD encryption method, default: aes-256-cfb
-o OBFS obfsplugin, default: http_simple
-t TIMEOUT timeout in seconds, default: 300
--fast-open use TCP_FASTOPEN, requires Linux 3.7+
--workers WORKERS number of workers, available on Unix/Linux
--forbidden-ip IPLIST comma seperated IP list forbidden to connect
--manager-address ADDR optional server manager UDP address, see wiki
General options:
-h, --help show this help message and exit
-d start/stop/restart daemon mode
--pid-file PID_FILE pid file for daemon mode
--log-file LOG_FILE log file for daemon mode
--user USER username to run as
-v, -vv verbose mode
-q, -qq quiet mode, only show warnings/errors
--version show version information
Online help: <https://github.com/shadowsocks/shadowsocks>
''')
def check_version(component, expected_version):
"""Make sure the package version in setuptools matches what we expect it to be
"""
_, relative_compath = comp_names[component]
compath = os.path.realpath(os.path.abspath(relative_compath))
sys.path.insert(0, compath)
import version
if version.version != expected_version:
raise EnvironmentError("Version mismatch during release, expected={}, found={}".format(expected_version, version.version))
def get_release_notes(component, version):
_, relative_compath = comp_names[component]
notes_path = os.path.join(relative_compath, 'RELEASE.md')
try:
with open(notes_path, "r") as f:
lines = f.readlines()
except IOError:
print("ERROR: Could not find release notes file RELEASE.md")
sys.exit(1)
release_lines = {y[2:].strip(): x for x, y in enumerate(lines) if y.startswith('##')}
if version not in release_lines:
print("ERROR: Could not find release notes for current release version")
sys.exit(1)
start_line = release_lines[version]
past_releases = [x for x in release_lines.itervalues() if x > start_line]
if len(past_releases) == 0:
release_string = "".join(lines[start_line+1:])
else:
release_string = "".join(lines[start_line:min(past_releases)])
if len(release_string) == 0:
print("ERROR: Empty release notes for current release version")
sys.exit(1)
return release_string
def health():
request_debug(r, logger)
result = {
'health': 'OK',
'version': version
}
return jsonify(result), CODE_OK
def about():
logger.info("path={}, method={}".format(r.path, r.method))
return render_template("about.html", author=author, version=version,
homepage=homepage)
def write(self, file, writer, registry):
if time.timezone < 0:
# divmod on positive numbers, otherwise the minutes have a different sign from the hours
timezone = "-%02i'%02i'" % divmod(-time.timezone/60, 60)
elif time.timezone > 0:
timezone = "+%02i'%02i'" % divmod(time.timezone/60, 60)
else:
timezone = "Z00'00'"
def pdfstring(s):
r = ""
for c in s:
if 32 <= ord(c) <= 127 and c not in "()[]<>\\":
r += c
else:
r += "\\%03o" % ord(c)
return r
file.write("<<\n")
if writer.title:
file.write("/Title (%s)\n" % pdfstring(writer.title))
if writer.author:
file.write("/Author (%s)\n" % pdfstring(writer.author))
if writer.subject:
file.write("/Subject (%s)\n" % pdfstring(writer.subject))
if writer.keywords:
file.write("/Keywords (%s)\n" % pdfstring(writer.keywords))
file.write("/Creator (PyX %s)\n" % version.version)
file.write("/CreationDate (D:%s%s)\n" % (time.strftime("%Y%m%d%H%M"), timezone))
file.write(">>\n")
def build_executable(self):
#delete old build dir.
print r'rd /S /Q build'
os.system(r'rd /S /Q build')
#delete old dist dir
print r'rd /S /Q dist'
os.system(r'rd /S /Q dist')
# create the exe
print r'c:\Python25\python setup.py py2exe'
os.system(r'c:\Python25\python setup.py py2exe')
print r'rename "dist" "pykeylogger-' + version.version + '""'
os.system(r'rename "dist" "pykeylogger-' + version.version + '""')
self.build_nsis_installer()
print r'move ".\pykeylogger-' + version.version + r'_win32_installer.exe" ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer.exe"'
os.system(r'move ".\pykeylogger-' + version.version + r'_win32_installer.exe" ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer.exe"')
print "zipping executables"
self.ZipFiles(r"pykeylogger-" + version.version, "pykeylogger-" + version.version + self.filename_addendum + "_win32.zip")
print r'rd /S /Q pykeylogger-' + version.version
os.system(r'rd /S /Q pykeylogger-' + version.version)
print r'rd /S /Q build'
os.system(r'rd /S /Q build')
# create md5sum
print r'""C:\Progra~1\UnixUtils\md5sum.exe" "pykeylogger-' + version.version + self.filename_addendum + r'_win32.zip" > "..\pykeylogger-' + version.version + self.filename_addendum + '_win32_md5sum.txt""'
os.system(r'""C:\Progra~1\UnixUtils\md5sum.exe" "pykeylogger-' + version.version + self.filename_addendum + r'_win32.zip" > "..\pykeylogger-' + version.version + self.filename_addendum + '_win32_md5sum.txt""')
print r'""C:\Progra~1\UnixUtils\md5sum.exe" ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer.exe" > "..\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer_md5sum.txt""'
os.system(r'""C:\Progra~1\UnixUtils\md5sum.exe" ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer.exe" > "..\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer_md5sum.txt""')
# move release files out of the source dir
print r'move ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32.zip" "..\pykeylogger-' + version.version + self.filename_addendum + '_win32.zip"'
os.system(r'move ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32.zip" "..\pykeylogger-' + version.version + self.filename_addendum + '_win32.zip"')
print r'move ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer.exe" "..\pykeylogger-' + version.version + self.filename_addendum + '_win32_installer.exe"'
os.system(r'move ".\pykeylogger-' + version.version + self.filename_addendum + r'_win32_installer.exe" "..\pykeylogger-' + version.version + self.filename_addendum + '_win32_installer.exe"')
#os.system(r'pause')
def check_provided(distribution, min_version, max_version=None, optional=False):
# taken from https://github.com/BD2KGenomics/toil-scripts/blob/master/setup.py
min_version = parse_version(min_version)
if isinstance(min_version, tuple):
raise RuntimeError("Setuptools version 8.0 or newer required. Update by running "
"'pip install setuptools --upgrade'")
if max_version is not None:
max_version = parse_version(max_version)
messages = []
toil_missing = 'Cannot find a valid installation of Toil.'
dist_missing = 'Cannot find an installed copy of the %s distribution, typically provided by Toil.' % distribution
version_too_low = 'The installed copy of %s is out of date.' % distribution
version_too_high = 'The installed copy of %s is too new.' % distribution
required_version = 'Setup requires version %s or higher' % min_version
required_version += '.' if max_version is None else ', up to but not including %s.' % max_version
install_toil = 'Installing Toil should fix this problem.'
upgrade_toil = 'Upgrading Toil should fix this problem.'
reinstall_dist = 'Uninstalling %s and reinstalling Toil should fix this problem.' % distribution
reinstall_toil = 'Uninstalling Toil and reinstalling it should fix this problem.'
footer = ("Setup doesn't install Toil automatically to give you a chance to choose any of the optional extras "
"that Toil provides. More on installing Toil at http://toil.readthedocs.io/en/latest/installation.html.")
try:
# This check will fail if the distribution or any of its dependencies are missing.
installed_version = parse_version(require(distribution)[0].version)
except DistributionNotFound:
installed_version = None
if not optional:
messages.extend([toil_missing if distribution == 'toil' else dist_missing, install_toil])
else:
if installed_version < min_version:
messages.extend([version_too_low, required_version,
upgrade_toil if distribution == 'toil' else reinstall_dist])
elif max_version is not None and max_version < installed_version:
messages.extend([version_too_high, required_version,
reinstall_toil if distribution == 'toil' else reinstall_dist])
if messages:
messages.append(footer)
raise RuntimeError(' '.join(messages))
else:
return str(installed_version)
def __init__(self, document, file):
if len(document.pages) != 1:
raise ValueError("EPS file can be constructed out of a single page document only")
page = document.pages[0]
canvas = page.canvas
try:
file.write("")
except:
filename = file
if not filename.endswith(".eps"):
filename += ".eps"
try:
file = open(filename, "w")
except IOError:
raise IOError("cannot open output file")
else:
filename = "stream"
pagefile = cStringIO.StringIO()
registry = PSregistry()
acontext = context()
pagebbox = bbox.empty()
page.processPS(pagefile, self, acontext, registry, pagebbox)
file.write("%!PS-Adobe-3.0 EPSF-3.0\n")
if pagebbox:
file.write("%%%%BoundingBox: %d %d %d %d\n" % pagebbox.lowrestuple_pt())
file.write("%%%%HiResBoundingBox: %g %g %g %g\n" % pagebbox.highrestuple_pt())
file.write("%%%%Creator: PyX %s\n" % version.version)
file.write("%%%%Title: %s\n" % filename)
file.write("%%%%CreationDate: %s\n" %
time.asctime(time.localtime(time.time())))
file.write("%%EndComments\n")
file.write("%%BeginProlog\n")
registry.output(file, self)
file.write("%%EndProlog\n")
file.write(pagefile.getvalue())
pagefile.close()
file.write("showpage\n")
file.write("%%Trailer\n")
file.write("%%EOF\n")