オープンソースこねこね

Webプログラミングなどについてあれこれ。

シェルスクリプトの代わりにPythonを使う


使BashPython使


Bash



Python

Tips

__future__23

23

23
 


使















HTTP
 




Bash


Bash




JSONjq

MacLinux

使


: bash調4

Bashrbenvherokubuildpack


rbenv: https://github.com/rbenv/rbenv

heroku-buildpack-php: https://github.com/heroku/heroku-buildpack-php


Bash


Bash便 - 


Bash





MacLinux(CentOS)



1

-h


MacLinux使PythonMacCentOS

Python


Python


Python23

使


Python33MacCentOSPython2使1使

Tips


Python使Tips

__future__23


__future__32使
from __future__ import division, print_function, absolute_import, unicode_literals

23


ConfigParserini Bash便233import2import使
try:
    import configparser as ConfigParser
except ImportError:
    # fallback for python2
    import ConfigParser

config = ConfigParser.RawConfigParser()
config.read("/path/to/configfile.conf")

23


23便runtime
class runtime:
    @staticmethod
    def v3():
        return sys.version_info >= (3,)

    @staticmethod
    def v2():
        return sys.version_info < (3,)

if runtime.v3(): 
    # バージョン3系のときの処理を書く...

使


使import osimport subprocess使

class colors:
    bold = '\033[1m'
    underlined = '\033[4m'

    black = '\033[30m'
    red = '\033[31m'
    green = '\033[32m'
    yellow = '\033[33m'
    blue = '\033[34m'
    magenta = '\033[35m'
    cyan = '\033[36m'
    lightgray = '\033[37m'
    darkgray = '\033[90m'
    lightred = '\033[91m'
    lightgreen = '\033[92m'
    lightyellow = '\033[93m'
    lightblue = '\033[94m'
    lightmagenta = '\033[95m'
    lightcyan = '\033[96m'
    
    background_black = '\033[40m'
    background_red = '\033[41m'
    background_green = '\033[42m'
    background_yellow = '\033[43m'
    background_blue = '\033[44m'
    background_magenta = '\033[45m'
    background_cyan = '\033[46m'

    reset = '\033[0m'

# 使い方
print(colors.red + "red text" + colors.reset)


colors使
def abort(s):
    print(colors.red + s + colors.reset, file=sys.stderr)
    sys.exit(1)

abort("error!")


Python使subprocess.check_output使 23rumtime使
out = subprocess.check_output("ls -la",  shell=True).strip()
if runtime.v3(): out = out.decode('utf-8')

fd = open("/path/to/file", 'w')
fd.write("""#!/usr/bin/env bash
set -e

echo "generated by Python"

""")
fd.close()

umask = os.umask(0)
os.chmod("/path/to/file", 0o755)
os.umask(umask)

try:
    fd = open(__file__, 'r')
    fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
    print("Another process is using: " + os.path.basename(__file__), file=sys.stderr)
    sys.exit(1)


argparse
import argparse

parser = argparse.ArgumentParser(
    description="cli application description",
    formatter_class=argparse.RawDescriptionHelpFormatter,
    epilog="""
additional description...

"""
    )

parser.add_argument("-V", "--version", dest="version", action="store_true", help="Print the version.")
args = parser.parse_args()
if args.version:
    print("v0.0.1")
    sys.exit(0)

-hepilog使 gitBash便

HTTP


githubapiBashJSON
#!/usr/bin/env python
from __future__ import division, print_function, absolute_import, unicode_literals

try:
    from urllib.request import urlopen, Request
    from urllib.error import HTTPError
except ImportError:
    # fallback for python2
    from urllib2 import urlopen, Request, HTTPError
import json
import sys

class runtime:
    @staticmethod
    def v3():
        return sys.version_info >= (3,)

    @staticmethod
    def v2():
        return sys.version_info < (3,)

def main():
    res = urlopen("https://api.github.com/users/kohkimakimoto/keys")
    body = res.read()
    if runtime.v3(): body = body.decode('utf-8')

    keys = json.loads(body)
    for key in keys:
        print(key['key'])

if __name__ == '__main__': main()


Bash便pip使