見出し画像

【Python初心者向け】煩わしいパスワード入力を自動化しよう!

こんにちわ。Sinyです。

この技術ノートは、Python初心者向けに便利ツールを開発しながらPythonの活用事例を学べる内容になっています。
膨大な数のパスワードやサーバを管理されている方にもおすすめのツールです

突然ですが、皆さん、SNS(Twitter,FaceBook等)やフリーメール、はたまた
会員登録が必要なサイトのユーザパスワードの入力ってどうされていますか?

私は、以前はパスワード管理用のテキストファイルを1つ作って、そこに全部パスワード情報を記載していました。

そして、ログオン認証が必要な時にパスワードを忘れるたびにテキストファイルを見て、パスワードを手入力して認証していました。

正直,めちゃくちゃめんどくさかったです。

Chromeの機能でID・パスワードをブラウザに保存することができたりしますが、ちょっとセキュリティ的に・・・というのもあり、パスワードは基本的にブラウザに保存させていないので、認証が必要になるたびにパスワードの入力が避けて通れないような状態でした。

これからは、生体認証(指紋、顔認証など)が進んでいくのでパスワードの管理というものはどんどん減っていくとは思いますが、まだしばらくはパスワード管理と付き合っていく必要があると思っています。

このノートでは、そんなめんどくさいパスワード入力作業の自動化ツールを開発していきます。

具体的にどんなプログラムか、簡単なデモ動画をつくりましたのでこちらをどうぞ。

目次

・このチュートリアルでできるようになること
・どんなことが学べるか
・どんな人におすすめか?
・Python環境の準備
・Pythonでパスワード入力作業を自動化する。

このチュートリアルでできるようになること

このチュートリアルでは、以下のことができるようになります。

Pythonを使って、ユーザ認証が必要なサイトのパスワード入力作業を省略させることができるようになる

# どんなことが学べるか

このチュートリアルで学べることは以下の通りです。

・Pythonを使ってExcelに記録されているデータを検索、取得する方法
・pythonコードで利用する設定ファイルの外出し管理の方法
・DOS画面からPythonシェルを任意のコマンド名で実行させる方法
などです。

どんな人におすすめか?

このチュートリアルは、以下の人にお勧めです。

パスワード入力が面倒くさいと思ってる人
パスワードを覚えることから解放されたい人
Pythonの入門者
・入門書をとりあえず1冊読み終わったけど次に何したらいいかちょっと迷っている人
膨大なサーバを管理しているシステム管理者
・普段の業務や作業を自動化したいと思っている人。
・これから入社する方で、自動化できるスキルを持っておきたい、入社してから業務改善で自動化を提案して自己アピールしたい。

基本的には、Pythonの基礎知識があれば簡単に進められる内容になっています。

Pythonプログラムのコード自体は100行ない程度ですので、入門者にちょうど良いコンテンツとなっています。

開発環境

このチュートリアルでは、以下の環境を前提に解説していきます。

Windows10/Anaconda(python3.x)/Excel
※パスワード情報を管理するファイルとしてExcelを利用します。

Anaconda環境のセットアップが完了していない方は、以下の記事などを参考にまずは環境構築を完了させておいてください。

では、早速ツールの開発を開始していきます!

全体構成

それでは、まずこれから開発するプログラムの全体構成を見てみましょう。


全体の処理は以下の流れで実行されます。

①コマンドの実行(pw [カテゴリ名]という形式のコマンド)
 ※pwコマンドに続けて第1引数に取得したいパスワードのカテゴリ名を指定します。(例: pw twitter,   pw facebookなど)
②パスワード管理ファイルに対して対象カテゴリ名を検索します。
③一致するものがあった場合に対象カテゴリのパスワードを取得します。
  ※一致する情報がなければエラーを返します。
④取得したパスワードをクリップボードにコピーします(Ctr+Vで貼り付けができる状態になります)
⑤認証画面でCtr+Vでパスワードを貼り付けれる状態になります。

なお、上記事例を応用すると業務効率化の観点でも活用できる事例はあると思います。

例えば、何百台もサーバを管理しているようなシステム管理者であれば、サーバ認証情報をまとめて記載したExcelファイルをチームメンバーだけがアクセスできる社内のファイルサーバ上に配置しておき、サーバ名ユーザ名を引数に与えてpwコマンドを発行する(pw [サーバ名] [ユーザ名])と、該当のユーザパスワードをクリップボードにコピーさせることができます。

そうすれば、いちいちサーバ認証パスワードを覚える必要がなく、業務効率も向上すると思います。

モジュールのインストール


まず最初に、pipコマンド(パッケージ管理)で必要なモジュールをインストールしていきます。

まずは、Windows10のスタート→Anaconda3(64bit)→Anaconda Promptを選択します。

Anaconda Prompt画面が起動たら以下のコマンドを実行してください。

pip install openpyxl
pip install pyperclip

①openpyxl→Excelファイルを操作するモジュール
②pyperclip→クリップボードにコピーするモジュール

以下のように、それぞれ「Successfully installed」の文字が表示されていればOKです。

(base) C:\Users\user\django-project\venv>pip install openpyxl
Collecting openpyxl
  Downloading https://files.pythonhosted.org/packages/08/8a/509eb6f58672288da9a5884e1cc7e90819bc8dbef501161c4b40a6a4e46b/openpyxl-2.5.12.tar.gz (173kB)
    100% |████████████████████████████████| 174kB 24.7MB/s
Collecting jdcal (from openpyxl)
  Using cached https://files.pythonhosted.org/packages/a0/38/dcf83532480f25284f3ef13f8ed63e03c58a65c9d3ba2a6a894ed9497207/jdcal-1.4-py2.py3-none-any.whl
Collecting et_xmlfile (from openpyxl)
Installing collected packages: jdcal, et-xmlfile, openpyxl
  Running setup.py install for openpyxl ... done
Successfully installed et-xmlfile-1.0.1 jdcal-1.4 openpyxl-2.5.12

(base) C:\Users\user\django-project\venv>pip install pyperclip
Collecting pyperclip
  Downloading https://files.pythonhosted.org/packages/2d/0f/4eda562dffd085945d57c2d9a5da745cfb5228c02bc90f2c74bbac746243/pyperclip-1.7.0.tar.gz
Installing collected packages: pyperclip
  Running setup.py install for pyperclip ... done
Successfully installed pyperclip-1.7.0

さて、今回開発するツールの全体のフォルダ構成は以下の通りです。

まずは、上記の通りCドライブ直下に必要なフォルダを作成してください。

パスワード管理ファイルの作成


それでは、まずC:\python\csv\password.xlsxとして、パスワード管理用のExcelファイルを作成します。

Excelファイルは、下記図の通り作成してください。

注意)ファイル名、セルの位置、シートの名前は、この後コーディングしていく際に利用するため、必ず下記図の指定通りにファイルを作成しておいてください。

では、早速コーディングに移っていきます。

まずは、先ほど作成したExcelファイルを読み込むところまでを作っていきます。

今回は、パスワード管理ファイル(password.xlsx)の配置場所をプログラムソース内(pw.py)ではなく外出しにした設定ファイル(pw.ini)内で変更できる構成にします。

まずは、C:\python\ini\pw.iniというファイルを作成して、以下のような設定を記述してください。

#pw.pyで利用される環境変数設定
#LOCAL_PW_FILE: ローカルPC上に存在するパスワード管理ファイル名を指定
[ENV]
LOCAL_PW_FILE = C:\python\csv\password.xlsx

最初の2行(#始まり)はコメント部分です。
3行目の[ENV]で、ENVという名称でセクションを定義しています。
最後に4行目で、「パラメータ名=パラメタ値」という形式でパスワード管理ファイルのパスを設定しています。

LOCAL_PW_FILE = C:\python\csv\password.xlsx

今回は、「LOCAL_PW_FILE」というパラメータ名にパスワード管理ファイルの配置先のパスを設定しています。

それでは、今作成したiniファイルを読み込むプログラムを作成していきます。
まず、C:\python\script\pw.pyファイルを空で作成し、以下のコードを複写してください。
この後1行ずつ解説していきます。

import sys
import pyperclip
import openpyxl
import configparser


def read_ini():
   inifile = configparser.SafeConfigParser()
   inifile.read(r'C:\python\ini\pw.ini')
   #変数値の取得
   local_pw_file = inifile.get('ENV', 'LOCAL_PW_FILE')
   return(local_pw_file)

【ソースコードの解説

まず、以下の部分で、必要なモジュールをインポートしています。

import sys
import pyperclip
import openpyxl
import configparser
sys → sys.exit()でプログラムを終了させるのに利用
openpyxl →Excelを操作するためのモジュール
configparser→iniファイルの情報を読み書きするためのモジュール
pyperclip →クリップボードにコピーするために利用

まず、以下の部分でiniファイルを読み込むための関数「read_ini」を定義します。

def read_ini():

つづいて、以下のコードで「C:\python\ini\pw.ini」ファイルを読み込みます。

   inifile = configparser.SafeConfigParser()
   inifile.read(r'C:\python\ini\pw.ini')

inifile = configparser.SafeConfigParser()の部分は決まった構文で、iniファイルを読み込むためのオブジェクトを生成している部分なので、「これはこういうものだ」と覚えておけばOKです。

そして、

inifile.read(読み込むiniファイルのパス)

という形式でiniファイルを読み込みます。
ファイルパスは「r」始まりで、パス情報を「' '」で囲っています。
r'C:\python\ini\pw.ini'」という形でiniファイルのパスを指定していますが、このように記載しておくと、内部的に「C:\\python\\ini\\pw.ini」というようにPythonが内部で自動変換してくれます。
PythonではWindows環境の場合、ファイルパスは¥マークを2つ記載してパスをつなげる必要があります。

もちろん、普通に「inifile.read(C:\\python\\ini\\pw.ini)」と設定してもOKですが、「r」始まりではなく単に「inifile.read(C:\python\ini\pw.ini)」と記載した場合は、¥マーク2つには変換されないのでパス情報を認識できずにエラーになってしまいますので注意してください。

続いて、以下のコードでpw.iniファイル内に定義されている[ENV]セクションの「LOCAL_PW_FILE」パラメータの値を取得し、local_pw_file変数にその値を代入しています。

local_pw_file = inifile.get('ENV', 'LOCAL_PW_FILE')

例えば、pw.iniファイルが以下のような設定だった場合、

#pw.pyで利用される環境変数設定
#LOCAL_PW_FILE: ローカルPC上に存在するパスワード管理ファイル名を指定

[ENV]
LOCAL_PW_FILE = C:\python\csv\password.xlsx

[ENV2]
LOCAL_PW_FILE2 = C:\python\csv\password2.xlsx
inifile.get('ENV2', 'LOCAL_PW_FILE2')

のように指定すると、[ENV2]のセクションに定義されているLOCAL_PW_FILE2の値を取得できるわけです。

このように「configparser」を使うとiniファイル上でセクション毎に定義されたパラメータの値を取得できるので、パラメータの値を外出ししたい場合に便利です。

最後にreturnで取得したファイルパス情報を返します。

return(local_pw_file)

以上で、read_ini関数は完成です。

それでは、起動しているAnaconda Prompt画面上で「python」と打ち込んでEnterキーを1回おしてください。

この状態で、以下のコードをコピペして、Pythonコードとして実行してみましょう。

import sys
import pyperclip
import openpyxl
import configparser

def read_ini():
   inifile = configparser.SafeConfigParser()
   inifile.read(r'C:\python\ini\pw.ini')
   #変数値の取得
   local_pw_file = inifile.get('ENV', 'LOCAL_PW_FILE')
   #local_share = pathlib.WindowsPath(local_pw_file)
   return(local_pw_file)


上記コマンドを実行して、read_ini関数を定義した後、以下のコードを実行してみると・・・

local_pw_file = read_ini()
print(local_pw_file)

以下の通り、pw.iniファイルに設定してあるLOCAL_PW_FILEパラメータの値が取得できることが確認できます。

>>> local_pw_file = read_ini()
>>> print(local_pw_file)
C:\python\csv\password.xlsx
>>>


次に、指定したカテゴリ名のパスワード情報を取得する「get_pw」関数を定義していきます。

まずは、get_pw関数の全体コードをお見せしますのでざ~っとめをとおしてみてください。
※この後1つ1つ解説していますので大丈夫です!

def get_pw(category_name, local_pw_dir):
   '''カテゴリ名を引数として受け取り、Excelに保存されている対象パスワードを取得する'''
         
   #パスワード管理ファイルのオープン
   try:
       wb = openpyxl.load_workbook(local_pw_file)
   except OSError:
       print('【ERROR】: 指定されたファイル[LOCAL_PW_FILE]が存在しません。',local_pw_file)
       sys.exit()
       
   
   #Excelの「パスワード一覧」シートをアクティブ化
   sheet = wb['パスワード一覧']
   #有効セルの列数の取得
   col_num = sheet.max_column
   #有効セルの行数の取得
   row_num = sheet.max_row
   #最終セル位置の取得
   end_cell = 'B' + str(row_num)
   
   #パスワードファイルの全情報をタプル化し抽出
   pw_info = tuple(sheet['A1':end_cell])
   #パスワード取得有無のフラグ
   flag = False
   password =''
   #タプル化したpw_infoから該当のカテゴリ名が記録されているセルを検索、パスワード情報を取得
   for i in range(row_num):  #行方向のループ処理
       for j in range(col_num): #列方向のループ処理
           if pw_info[i][j].value == category_name:   #カテゴリ名が見つかったら
               password = pw_info[i][j+1].value       #該当行のパスワード列の値を取得
               flag = True                            #パスワードが見つかったらflagをTrueにセット
               break
           else:
               break
       if flag:    #flag=Trueだったらループを抜ける。
           break
   #パスワード情報を戻す
   return password

【ソースコードの解説】

まず、以下で最初にget_pw関数を定義します。

def get_pw(category_name, local_pw_dir):

引数として2つ定義しています。

第1引数:category_name→検索するカテゴリ名称(例:twitter, facebook)
第2引数:local_pw_dir →read_ini関数の戻り値であるパスワード管理ファイルのパス

続いて以下の部分です。

    #パスワード管理ファイルのオープン
   try:
       wb = openpyxl.load_workbook(local_pw_file)
   except OSError:
       print('【ERROR】: 指定されたファイル[LOCAL_PW_FILE]が存在しません。',local_pw_file)
       sys.exit()

基本形は以下で、openpyxlload_workbookメソッドを使って指定したExcelファイルをオープンします。

openpyxl.load_workbook(<ファイルパス>)

変数wbには、以下のようにopenpyxlでオープンしたExcelファイルオブジェクト(インスタンス)が格納されていることが確認できます。

>>> wb
<openpyxl.workbook.workbook.Workbook object at 0x0000020BC8C6D198>

今回は、 try~except句を使ってExcelファイルのオープンに失敗した場合にエラーメッセージを表示するようにしています。

ファイルオープンに失敗た場合、OSErrorエラーをキャッチしてprintでエラーメッセージを表示させます。

print('【ERROR】: 指定されたファイル[LOCAL_PW_FILE]が存在しません。',local_pw_file)

メッセージ表示後に以下のコマンドで処理を強制終了させます。

       sys.exit()

sys.exit()メソッドを使うには、予め以下のコマンドを実行しておく必要があります。

import sys

続いて、Excelファイルをオープンしたらシートを選択して、シートに存在するデータの範囲(列、行)を特定していきます。

コードは以下の部分です。

   #Excelの「パスワード一覧」シートをアクティブ化
   sheet = wb['パスワード一覧']
   #有効セルの列数の取得
   col_num = sheet.max_column
   #有効セルの行数の取得
   row_num = sheet.max_row
   #最終セル位置の取得
   end_cell = 'B' + str(row_num)


まずは、以下の部分で「パスワード一覧」シートをActive化(選択)します。

sheet = wb['パスワード一覧']

以下の形式で記載します。

変数 = <openpyxlオブジェクト>['Excelシート名']

今回は、ファイルオープンしたオブジェクト名が「wb」、
検索対象のExcelシート名が「パスワード一覧」なので

sheet = wb['パスワード一覧']

と指定し、その結果をsheet変数に格納します。

sheet変数の中身を表示すると、以下のようなopenpyxlWorksheetクラスのインスタンス情報が格納されます。

>>> sheet
<Worksheet "パスワード一覧">
>>>

続いて、以下の2行で、パスワード一覧シート内でデータが存在するセルの範囲を特定します。

   #有効セルの列数の取得
   col_num = sheet.max_column
   #有効セルの行数の取得
   row_num = sheet.max_row


先ほど生成されたsheetオブジェクト(オープンしたExcelシートの情報が格納されている)を利用して、必要な情報を取得していきます。

openpyxl.worksheet.worksheet.Worksheetクラスに様々なメソッドが用意されていて、今回は以下のメソッドを利用して有効セルの列数と行数を取得します。

max_column:列の最大Index番号
max_row:行の最大Index番号

次に、以下の部分で最終セル位置を取得しています。

    #最終セル位置の取得
    end_cell = 'B' + str(row_num)

改めて、以下のコードで取得した値を図で表すと・・・

    #有効セルの列数の取得
   col_num = sheet.max_column
   #有効セルの行数の取得
   row_num = sheet.max_row
   #最終セル位置の取得
   end_cell = 'B' + str(row_num)

以下のようになります。

続いて、上記で取得した列数、行数、最終セル位置の情報を使って、
パスワードデータが格納されているセル領域の情報を一括で取得します。

    #パスワードファイルの全情報をタプル化し抽出
   pw_info = tuple(sheet['A1':end_cell])

図で表すと、以下の赤枠部分のデータを取得しています。

上記のパスワード管理シートの例だと、2列、7行(A1~B7)の情報が取得されます。
取得されたpw_info変数の長さと中身を見ると、以下のようになっています。
※長さ=7はA,B列の7行分のレコードが取得されているためです。

>>> len(pw_info)
7
>>> pw_info
((<Cell 'パスワード一覧'.A1>, <Cell 'パスワード一覧'.B1>), (<Cell 'パスワード一覧'.A2>, <Cell 'パスワード一覧'.B2>), (<Cell 'パスワード一覧'.A3>, <Cell 'パスワード一覧'.B3>), (<Cell 'パスワード一覧'.A4>, <Cell 'パスワード一覧'.B4>), (<Cell 'パスワード一覧'.A5>, <Cell 'パスワード一覧'.B5>), (<Cell 'パスワード一覧'.A6>, <Cell 'パスワード一覧'.B6>), (<Cell 'パ スワード一覧'.A7>, <Cell 'パスワード一覧'.B7>))
>>>

続いて、以下のコードで変数の初期値を設定しています。

    #パスワード取得有無のフラグ
   flag = False
   password =''


flag →パスワード情報を取得できたかどうかのフラグ
   False:未取得、 True:取得済み
password →パスワードを格納する変数を空で定義

最後に、取得したrow_num(行数)col_num(列数)を利用して、forループ処理を以下のように回していき、category_nameの値と一致するセルの位置を検索します。

             1行目の1番目の列 → n番目列 → n+1番目の列 → col_num番目の列
                       ↓
             2行目の1番目の列 → n番目の列 → n+1番目列 → col_num番目の列
                       ↓
row_num行目の1番目の列 → n番目の列 → n+1番目列 → col_num番目の列

ソースコードは以下の部分です。

   #タプル化したpw_infoから該当のカテゴリ名が記録されているセルを検索、パスワード情報を取得
   for i in range(row_num):  #行方向のループ処理
       for j in range(col_num): #列方向のループ処理
           if pw_info[i][j].value == category_name:   #カテゴリ名が見つかったら
               password = pw_info[i][j+1].value       #該当行のパスワード列の値を取得
               flag = True                            #パスワードが見つかったらflagをTrueにセット
               break
           else:
               break
       if flag:    #flag=Trueだったらループを抜ける。
           break
   #パスワード情報を戻す

まず、以下の2重ループについて説明します。

    for i in range(row_num):  #行方向のループ処理
       for j in range(col_num): #列方向のループ処理


上記の1番目のforループで行方向(1~row_numまで)のループ処理を行います。
2番目のforループは列方向(1~col_numまで)のループ処理を行います。

つまり、今回のExcelファイルの例だと、A1~B7までのセルがループ対象になり、以下の順番でセルの値を検索していきます。

A1→B1→A2→B2→A3→B3→・・・ →A7→B7

i行の列目のセルの値は「pw_info[i][j].value」と指定することで取得することができるため、以下の部分で、A1~B7セルを順次検索し値がcategory_nameと一致するかをチェックします

一致した場合、該当行「i行」のB列に格納されているパスワード
pw_info[i][j+1]」の値をpassword変数にセットします。

for i in range(row_num):  #行方向のループ処理
        for j in range(col_num): #列方向のループ処理
            if pw_info[i][j].value == category_name:   #カテゴリ名が見つかったら
                password = pw_info[i][j+1].value       #該当行のパスワード列の値を取得
                flag = True                            #パスワードが見つかったらflagをTrueにセット
                break
            else:
                break
        if flag:    #flag=Trueだったらループを抜ける。
            break

そして、パスワードが見つかったことを判定するflag変数をTrueに変更して2つめのforループをbreakで抜けます。

パスワードが一致しない場合はそのまま2つ目のforループを抜けます。
また、2つ目のforループを抜けた後にflagがTrueだったら(if flag:の部分)

1番目のforループ(row_num)もbreakで抜けます。

最後にreturnで取得したパスワード変数(password)を返します。

   #パスワード情報を戻す
   return password

以上でget_pw関数の完成です。

さて、iniファイルを読み込むread_ini()関数と、パスワードを取得するget_pw関数の定義が完了したので、メイン処理をコーディングしていきます。

以下が、メイン処理の全コードになります。

# MAIN処理
#iniファイルの読み込み
local_pw_file = read_ini()
if len(sys.argv) < 2 or len(sys.argv) > 2:
   print('使い方: pw [カテゴリ名]')
   print('第1引数にカテゴリ名(必須)を指定します。')
   sys.exit()
elif len(sys.argv) == 2:
   category_name = sys.argv[1]
   passwords = get_pw(category_name, local_pw_file)
   if len(passwords) == 0:
       print('存在しないか、誤ったカテゴリ名を指定しています。')
       print('入力値を確認してください')
       sys.exit()
   pyperclip.copy(passwords)
   print('【カテゴリ名:' + category_name + '】のパスワードをクリップボードにコピーしました。')
   sys.exit()

【ソースコードの解説】

まず、以下のコードread_ini関数を実行してパスワード管理ファイルのパス情報を取得し、local_pw_file変数に格納します。

#iniファイルの読み込み
local_pw_file = read_ini()

実行結果は、以下のようになります。
local_pw_file変数にパスワード管理ファイルのパスが格納されていることが確認できます。

>>> local_pw_file = read_ini()
>>> local_pw_file
'C:\\python\\csv\\password.xlsx'
>>>

次に、以下の部分でコマンドの引数チェックを行っています。

if len(sys.argv) < 2 or len(sys.argv) > 2:
   print('使い方: pw [カテゴリ名]')
   print('第1引数にカテゴリ名(必須)を指定します。')
   sys.exit()

コマンドは「pw [カテゴリ名]」という形式で、pwコマンドに続いて第1引数に取得したいカテゴリ名を指定する仕様とするため、コマンドライン引数の数がである必要があります。

コマンドライン引数の数はlen(sys.argv)と記載することで取得できますので、この長さをチェックします。

具体的には、len(sys.argv)の数が2より小さいか、2より多い場合、仕様と一致しないコマンドラインになるため、エラーメッセージを表示して処理を強制終了(sys.exit())させます。

つづいて、以下の部分。

elif len(sys.argv) == 2:
   category_name = sys.argv[1]

len(sys.argv)==2だった場合、仕様(pw [カテゴリ名])に一致するため、第1引数に指定された引数値をsys.argv[1]で取得し、category_name変数に格納します。

そして、次のif文で取得したパスワードの長さをチェックしています。

   if len(passwords) == 0:
       print('存在しないか、誤ったカテゴリ名を指定しています。')
       print('入力値を確認してください')
       sys.exit()

passwords変数の初期値は「 password =''」と空で設定していますので、
もしパスワード管理ファイルを全てチェックした結果パスワードが見つからない場合は、password変数の中身が空っぽのまま(=長さが0のまま)です。

password変数の長さが0の場合は、パスワード値の記録もれか、存在しないカテゴリ名を指定している場合なので、その旨print関数でメッセージを表示して、強制終了(sys.exit())させます。

最後に、以下のコードです。

   pyperclip.copy(passwords)
   print('【カテゴリ名:' + category_name + '】のパスワードをクリップボードにコピーしました。')
   sys.exit()

pyperclip.copy(変数名)を実行することで、変数名に格納された値をクリップボードに格納させることができます。

クリップボードに格納されたデータは、Ctr+Vキーで貼り付けすることができますので、この時点で指定したカテゴリ名のパスワードがペースト(貼り付け)できる状態になるわけです。

最後にprint関数で取得されたパスワードのカテゴリ名を表示させ、sys.exit()でプログラムを終了させます。

以上でプログラムが完成です!


バッチファイルの設定


さて、pw.pyというファイルにPythonのソースコードを書いていきましたが、最終的には以下の形式でPythonシェルを実行したいわけです。

例) pw twitter → twitterのパスワードを取得する。

上記を実現するために以下の2つを設定していきます。

①C:\python\bat\pw.batの作成
②環境変数の設定

まず①からですが、pw.batファイルを作成後に、以下のコードを記載します。

@python.exe C:\python\script\pw.py %*

こうすることで、pw.batを引数付きで実行した際にpw.pyシェルを指定した引数付きで実行することができるようになります。

最後に②の環境変数の設定です。

画面左下の「ここに入力して検索」の欄に「PC」と打ち込み、上に表示された「PC」を右クリック→「プロパティ」を選択します。

システムの詳細設定」を選択後に画面下の「環境変数」をクリックします。

以下のような画面が表示されるので、画面下のほうの「システム環境変数
の「Path」を選択した状態で、「編集(I)」ボタンを押してください。

新規」ボタンを押して、「C:\python\bat」を入力したら「OK」ボタンを押します。


一旦Anaconda Prompt画面を閉じて、再度起動します。

試しに「pw」と打ち込んでEnterキーを押してみてください。
以下の通り、pwコマンドが認識される状態になっているはずです。

引数を指定していないので、エラーチェックに引っ掛かり、使い方が表示されるはずです。

試しに、「twitter」のパスワードを取得してみましょう。
pw twitterと打ち込んでEnterキーを押しましょう。

以下の通り、twitterのパスワードがクリップボードにコピーされます。

Ctr+Vキーを押すとTwitterのパスワードが張り付けられる状態になっているはずです!

以上で、すべての開発作業が完了です!

なお、Anaconda Prompt画面は、以下の手順で「タスクバーにピン留め」しておくとすぐに起動できるので便利です。

お願い


本チュートリアルを問題なく読了された場合は「#SINYの技術NOTE」というタグ付きでTwitterでツイートしていただくと、こちらで確認しやすいのでお願い致します!


最後に

本チュートリアルを最後まで読んでいただき、ありがとうございました。
わかりづらい部分や、どうしてもエラーが解消できないといったことがあれば、以下のいづれかの方法でお問合せください。

・TwitterID「@shinya_hd」にDM
・問い合わせサイトから質問
※可能な限り、調査、対応致します。

※注意

本チュートリアルによって生じた、データの欠損、不利益などに関して、本著者は一切の責任を負うことができませんのでご注意ください。


今後も、いろいろな技術チュートリアルを公開していこうと考えていますので、引き続きよろしくお願いいたしますm( _ _ )m

最後まで精読いただき、誠にありがとうございました。


主にITテクノロジー系に興味があります。 【現在興味があるもの】 python、Django,統計学、機械学習、ディープラーニングなど。 技術系ブログもやってます。 https://sinyblog.com/