かべぎわブログ

ブログです

PowerShellでhistoryを表示する

概要

PowerShellでコマンド履歴を表示します。

コマンド

こうすればみれる

PS1> Get-History

  Id CommandLine
  -- -----------
   1 echo 'wawawa'
   2 echo 'sasasa'
   3 echo 'dadada'

おわりに

わすれがち

Windows PowerShellクックブック

Windows PowerShellクックブック

  • 作者: Lee Holmes,マイクロソフト株式会社ITプロエバンジェリストチーム(監訳),菅野良二
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/10/23
  • メディア: 大型本
  • 購入: 4人 クリック: 72回
  • この商品を含むブログ (15件) を見る

pytestでPythonスクリプトをテストする

概要

PythonのテストツールのpytestをつかってPythonスクリプトのテストをしてみたいと思います。

インストール

pytestはpipでインストールできます。

$ pip install pytest

テストしてみる

実際にpytestでテストしてみます。

前提

こんなかんじのスクリプトたちがあるとする。

テストされる.py

たしざんするだけのやつ

def addition(a, b):
    result = a + b
    return(result)

テストする.py

そしてそれのテストコードがあるとするとこう(本当はこんなケース必要ないけれど)
1+2=3だよねー
2+2=4だよねーってかんじ。

def test_addtion_3()はまちがっているのでエラーになるはず

import wawawa
def test_addtion_1():
    assert wawawa.addition(1,2) == 3

def test_addtion_2():
    assert wawawa.addition(2,2) == 4

def test_addtion_3():
    assert wawawa.addition(2,2) == 99

pytest でテストしてみる

テストしてみます。
いい忘れていたけどディレクトリ構成はこんなかんじ。

$ ls -l .
-a----        2019/10/21     7:44            141 test_wawawa.py
-a----        2019/10/21     7:41             61 wawawa.py

テストしてみます。
わかりやすくするためにオプションに-vを指定して実行してあげています。

$ pytest -v ./test_wawawa.py
====================================== test session starts =======================================
platform win32 -- Python 3.7.4, pytest-5.2.1, py-1.8.0, pluggy-0.13.0 -- c:\users\takak\appdata\local\programs\python\python37-32\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\takak\test_test
collected 3 items

test_wawawa.py::test_addtion_1 PASSED                                                       [ 33%]
test_wawawa.py::test_addtion_2 PASSED                                                       [ 66%]
test_wawawa.py::test_addtion_3 FAILED                                                       [100%]

============================================ FAILURES ============================================
_________________________________________ test_addtion_3 _________________________________________

    def test_addtion_3():
>       assert wawawa.addition(2,2) == 99
E       assert 4 == 99
E         -4
E         +99

test_wawawa.py:10: AssertionError
================================== 1 failed, 2 passed in 0.03s ===================================

3つ目のテストケースでFAILEDとなっていることがわかる。

おわりに

べんりですね。

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

Pythonから別のPythonファイルを呼び出す

概要

Pythonスクリプトから別のPythonファイルのスクリプトを呼び出してみたいと思います。

こんなかんじ

こんなかんじでできます。
呼び出すPythonファイルがどこにあるかによって指定の仕方がすこしちがいます。

同一階層のPythonを呼び出す

こんなかんじだとする。

python_dir
    ├─wawawa.py
    └─sasasa.py

wawawa.pyからsasasa.pyを呼び出す場合、こんなかんじでよびだしてあげる。

import sasasa

これだけでよい。

ディレクトリの中にあるPythonを呼び出す

ディレクトリの中にあるPythonを呼び出す場合はこんなかんじです。
こんなかんじだとする。

python_dir
    ├─wawawa.py
    └─dadada/
      └─sasasa.py

wawawa.pyからsasasa.pyを呼び出す場合、こんなかんじでよびだしてあげる。

from dadada import sasasa

おわりに

べんりですね

東京大学のデータサイエンティスト育成講座

東京大学のデータサイエンティスト育成講座

argparseで2つの引数のどちらかのみオプションとして指定させる

概要

Pythonでargparseをつかって2つの引数のうちどちらかののみを指定している場合のみOKとしてみます。

文章で書くとよくわかんない。
こんなかんじにしたい。

$ ./wawawa.py --wawawa
# これはOK

$ ./wawawa.py --sasasa
# これもOK

$ ./wawawa.py --wawawa --sasasa
# これはNG

こうすればよい

こんなかんじで指定してあげる

mutual = parser.add_mutually_exclusive_group(required=True)
mutual.add_argument('--wawawa',help='wawawa desu.')
mutual.add_argument('--sasasa',help='sasasa desu.')

おわりに

べんりですね

入門 Python 3

入門 Python 3

プルリクエストを投げるまで(git switch対応版)

プルリクエストを投げるまでの手順です。
git switch対応版です。

手順

ブランチをつくってきりかえる

一気にできる。

$ git switch -c develop

Switched to a new branch 'develop'

一応確認

$ git branch

* develop
  master

addしてcommitしてpushする

コードを修正して
addして

$ git add delete_iroiro.py

commitして

$ git commit -m 'add delete'

[develop 179b2ed] add delete
 1 file changed, 10 insertions(+), 4 deletions(-)

pushします

$ git push origin develop

Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 515 bytes | 515.00 KiB/s, done.
Total 5 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
remote:
remote: Create a pull request for 'develop' on GitHub by visiting:
remote:      https://github.com/takakabe/aws_tools/pull/new/develop
remote:
To https://github.com/takakabe/aws_tools.git
 * [new branch]      develop -> develop

プルリクエストなげる

GitHubにいって f:id:kabegiwakun:20191017073822p:plain

compareのブランチえらんでプルリクエストのタイトルと文章をかいてクリエイトする。

f:id:kabegiwakun:20191017074019p:plain

チェックしてマージする

変更がいいかんじだったらマージする
f:id:kabegiwakun:20191017074152p:plain

後処理

GitHub上のブランチを消して
f:id:kabegiwakun:20191017074253p:plain

ローカルの方からも消してあげる
そのまえにブランチ切り替えて

$ git switch master

Switched to branch 'master'
Your branch is up to date with 'origin/master'.

マスターを最新にしてあげて

$ git pull origin master

remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From https://github.com/takakabe/aws_tools
 * branch            master     -> FETCH_HEAD
   b6702a2..14a5b5b  master     -> origin/master
Updating b6702a2..14a5b5b
Fast-forward
 IAM/delete_iroiro/delete_irorio.py | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

さっきのブランチを削除

$  git branch -d develop

Deleted branch develop (was 179b2ed).

おしまい

おわり

実用Git

実用Git

  • 作者: Jon Loeliger,吉藤英明(監訳),本間雅洋,渡邉健太郎,浜本階生
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/02/19
  • メディア: 大型本
  • 購入: 7人 クリック: 287回
  • この商品を含むブログ (45件) を見る

PowerShellで管理者権限でしか実行できないようにする

概要

PowerShellのスクリプトを管理者権限でしか実行できないようにしてみます。

前提

PowerShell v4 以上

スクリプト

こんなかんじ
#Requires -RunAsAdministratorを書いてあげる。

#Requires -RunAsAdministrator

# ↓確認用
Write-Host 'wawawa'

実行してみる

ためしに一般ユーザの一般の権限でうごかしてみる。

> .\admin.ps1
.\admin.ps1 : The script 'admin.ps1' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.
At line:1 char:1
+ .\admin.ps1
+ ~~~~~~~~~~~
+ CategoryInfo          : PermissionDenied: (admin.ps1:String) [], ScriptRequiresException
+ FullyQualifiedErrorId : ScriptRequiresElevation

管理者権限で実行するとこんなかんじ。
うごく。

> .\admin.ps1
wawawa

おわりに

べんりですね。

Windows PowerShellクックブック

Windows PowerShellクックブック

  • 作者: Lee Holmes,マイクロソフト株式会社ITプロエバンジェリストチーム(監訳),菅野良二
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/10/23
  • メディア: 大型本
  • 購入: 4人 クリック: 72回
  • この商品を含むブログ (15件) を見る

PythonでIAMグループとかIAMロールをかんたんに削除してくれるPythonをかいた

概要

PythonでIAMグループとかIAMロールをかんたんに削除してくれるPythonをかきました。

これと
IAMグループをかんたんに削除してくれるPythonをかいた - かべぎわブログ
これ
IAMロールをかんたんに削除してくれるPythonを書いた - かべぎわブログ

りょうほういっしょにできんじゃね?という意見をもとにくっつけた。
classで継承させたりしている。
これつかいかたあっているのかな???

コード

こんなかんじ。

つかいかた

こんなかんじ

usage: ./delete_irorio.py [-h] (--group-name GROUP_NAME | --role-name ROLE_NAME) [--profile [PROFILE]]

おわりに

classむずかしい

入門 Python 3

入門 Python 3

PowerShellで管理者権限かどうか判定する

概要

PowerShellでAdministratorかどうかを判定してみます。

スクリプト

こんなかんじ。

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$bool_admin = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if ($bool_admin) {
    Write-Output 'Admin'
} else {
    Write-Output 'NotAdmin'
}

実行してみる

管理者権限で実行してみるとこう。

> .\check_admin.ps1
Admin

そうじゃないとこう。

> .\check_admin.ps1
NotAdmin

おわりに

おわり。

Windows PowerShellクックブック

Windows PowerShellクックブック

  • 作者: Lee Holmes,マイクロソフト株式会社ITプロエバンジェリストチーム(監訳),菅野良二
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/10/23
  • メディア: 大型本
  • 購入: 4人 クリック: 72回
  • この商品を含むブログ (15件) を見る

IAMグループをかんたんに削除してくれるPythonをかいた

概要

IAMグループをかんたんに削除してくれるPythonをかきました。
グループを削除する際にはポリシーをデタッチしたりユーザをリムーブしたりいろいろしなければいけないですがこのスクリプトはそれらを解決します。
いろいろデタッチしたりしてからグループを削除してくれます。

スクリプト

おわりに

resourceたのしい。

入門 Python 3

入門 Python 3

VSCodeで引数を与えてデバッグする

概要

VSCodeで引数を与えてデバッグしてみます。

手順

VSCodeのデバッグ画面の設定画面をクリックします。
f:id:kabegiwakun:20191012195717p:plain

launch.jsonが開くのでそこに"args":["--group-name", "test_group"],こんなかんじで入力してあげます。
この例だと./wawawa.py --group-name test_groupと実行したのとおなじかんじになります。
f:id:kabegiwakun:20191012195856p:plain

おわりに

たまにわすれがち

Visual Studio Codeデバッグ技術 (技術の泉シリーズ(NextPublishing))

Visual Studio Codeデバッグ技術 (技術の泉シリーズ(NextPublishing))

IAMロールをかんたんに削除してくれるPythonを書いた

概要

IAMロールをかんたんに削除してくれるPythonをかきました。

ロールを削除する際にはポリシーをデタッチしたりインスタンスプロファイルをリムーブしたりいろいろしなければいけないですがこのスクリプトはそれらを解決します。
いろいろデタッチしたりしてからロールを自動で削除してくれます。

スクリプト

こんなかんじです。

つかいかた

こんなかんじ。
だいたいわかるとおもう。
基本的にはロール名を指定してあげるだけ。

usage: ./delete_role.py [-h] [--profile [PROFILE]] --role-name ROLE_NAME

required arguments:  
  --role-name ROLE_NAME The name of the role to delete.

optional arguments:  
  --profile [PROFILE]   Use a specific profile from your credential file.

おわりに

ぼくのPython力があのころとくらべてすごくあがっていることがわかる

イシューからはじめよ ― 知的生産の「シンプルな本質」

イシューからはじめよ ― 知的生産の「シンプルな本質」

自分のインスタンスIDを取得する方法まとめ

自分のインスタンスIDを取得する方法をまとめてみた。

メタデータを取得する

メタデータをcurlなりwgetなりで取得する。

curl http://169.254.169.254/latest/meta-data/instance-id
i-XXXXXX

cloud-utilを実行する

以下のコマンドを実行する。
AmazonLinuxであればデフォルトでインストールされている。
そうでないOSの場合はcloud-utilをインストールしてあげる必要がある。

ec2-metadata -i
i-XXXXXX

cloudinitのディレクトリを参照する

cloudinitのディレクトリにインスタンスIDがあるのでそれを見てみる。

cat /var/lib/cloud/data/instance-id
i-XXXXXX

AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー

AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー

PowerShellでブレース展開みたいなことをやってみる

概要

PowerShellでブレース展開みたいなことをやってみます。

やってみる

こんなかんじ。

PS C:\> 'web','db','mq' | % { "$_-server" }
web-server
db-server
mq-server

またはこう。

PS C:\> 1..3 |  % { "server-$_" }
server-1
server-2
server-3

フォーマットもつかえる

PS C:\> 1..3 |  % { "server-{0:D2}" -f $_ }
server-01
server-02
server-03

おわりに

べんりですね

Windows PowerShellクックブック

Windows PowerShellクックブック

  • 作者: Lee Holmes,マイクロソフト株式会社ITプロエバンジェリストチーム(監訳),菅野良二
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/10/23
  • メディア: 大型本
  • 購入: 4人 クリック: 72回
  • この商品を含むブログ (15件) を見る

Powershellで必須の引数を定義する

概要

PowerShellをつかって必須の引数を設定してみます。

そもそも引数を設定するには

こんなかんじで設定できる。

Param($ichi, $ni)

# 引数を出力する
Write-Host $ichi
Write-Host $ni

スクリプトを実行したときにたとえばこんなかんじになる。

.\script.ps1 wawawa sasasa
wawawa
sasasa

実行時に変数名をオプションをとして実行することもできる。

 .\script.ps1 -ni sasasa -ichi wawawa
wawawa
sasasa

必須の引数を定義する

本題の必須の引数を定義してみる。

以下のようなかんじで[parameter(mandatory)]$変数名で指定してあげる。
以下は$niを必須に指定している。

Param($ichi, [parameter(mandatory)]$ni)

引数を1つだけ指定して実行すると$niの値の入力を促される。

.\script.ps1 wawawa

cmdlet script.ps1 at command pipeline position 1
Supply values for the following parameters:
ni:

おわりに

usageでいろいろなことを書くのもいいけどこういう制御もちゃんとしてあげたい。

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説

PowerShellで自分のファイル名を取得する

概要

PowerShellをつかって実行中の自分のファイル名を取得してみます。

こんなかんじでできます

こんなかんじでできます。

$my_script_name = $myInvocation.MyCommand.name

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説