今回は、処理の強制終了の仕方と
任意の終了コードを返す方法を解説していきます

■ 処理の強制終了

sysモジュールをインポートし、
exit関数を使うことで処理を強制終了できます。
____________________
【exit_test.py】
# sysモジュールのインポート
import sys

print(1)
print(2)
print(3)
# 強制終了
sys.exit()
print(4)
print(5)

# 【出力結果】1
#                   2
#                   3
____________________
このように、後続の処理が行われず
処理が強制終了されたことが分かります。










■強制終了し、任意の終了コードをシェルに返す

ここでは応用編として
・main.shでexit_test.pyを動かす
・exit_test.pyで終了コード255を返す
・受け取った終了コードを出力
という処理を作っていきます。
____________________
【exit_test.py】
# sysモジュールのインポート
import sys

print(1)
print(2)
print(3)
# 強制終了 終了コードは0~255で指定
sys.exit(255)
print(4)
print(5)
____________________

_______________
【main.sh】
#!/bin/sh

#カレントディレクトリをここにする
cd `dirname $0`

python3 exit_test.py

echo $?

# 【出力結果】1
#             2
#             3
#             255
_________________


このように、Pythonの処理の終了コードを
シェルに返すことが出来ました。

ちなみに、直前の処理の終了コードは
$? という変数に格納されます。

現場からは以上です!

Python3にてカレントディレクトリの取得方法

 

■ カレントディレクトリとは

今自分がいるファイル階層のことです。

 

Linuxだと

$ pwd

で取得できるあれです。(伝わるかな?)

 

今回の使い方ですと、

Pythonファイルが置かれている位置を取得する

というような意味合いとなります。

 

 

 

 

 

 

 

 

■ コマンド

____________________

from pathlib import Path

 

CURRENT_DIR = Path(__file__).resolve().parent

____________________


ちょっとよくわからないと思いますが、

ファイルパス関連の操作をできるモジュールをインポートし、

現在位置を取得する関数を使っています。

 

(深く理解する必要はないと思います)

 

 

 

 

 

 

■ 実際に動かしてみましょう

本ファイルの配置は以下とします

/Users/Me/プログラミング/パイソン関連/get_current.py

____________________

【get_current.py】

# モジュールのインポート

from pathlib import Path

 

# カレントディレクトリの取得
CURRENT_DIR = Path(__file__).resolve().parent

 

print(CURRENT_DIR)

# 【出力結果】 /Users/Me/プログラミング/パイソン関連
____________________

 

 

 

 

 

 

 

 

 

■カレントディレクトリより上層のファイルにアクセスしたい

本ファイルの配置は以下とします

/Users/Me/プログラミング/パイソン関連/get_current.py

アクセスしたいファイルは以下とします

/Users/Me/メモ/memo.txt

____________________

【get_current.py】

# モジュールのインポート

from pathlib import Path

 

# カレントディレクトリの取得
CURRENT_DIR = Path(__file__).resolve().parent

 

# 対象のファイルの位置を指定

TARGET_DIR = str(CURRENT_DIR) + "/../../メモ/memo.txt"

 

print(TARGET_DIR)

# 【出力結果】 /Users/Me/プログラミング/パイソン関連/../../メモ/memo.txt
____________________

 

カレントディレクトリ + "/../"

とすると、ディレクトリ階層を1つ上に上がることが出来ます。

 

 

 

 

 

 

■ こんなのどこで使うの???

Pythonファイルから別のファイルにアクセスしたい時、

基本的に相対パスでファイルを指定すると思うのですが

Pythonファイルで相対パスを指定すると

実行位置からの相対パスとなってしまいます。

 

つまり、別のファイル階層に置いているシェルスクリプトで

Pythonファイルを実行すると、

シェルスクリプトからの相対パスでファイルを探しに行きます。

 

このようなエラーを避けるために、カレントディレクトリを取得することが

メンテナンス性能を高めることにとって大切となります。

 

今回はちょっとむずかしい内容だったかもしれませんね。。

 

現場からは以上です!

こんにちは。

 

アメブロやSNSを見ていると

「プログラミングをはじめたいけど何からやればいいの??」

 

という疑問が飛び交っています。

 

そんな疑問に現役のWebエンジニアである私からのアンサーを

非力ながら解説します。

 

結論から言います。

 

とりあえずProgateのHTML/CSS/JavaScriptを全部やってください

 

はい、たったこれだけです。

 

というかここをやっていないのに

エディターが云々やら環境構築が云々やらで悩むのは

時間がひじょ〜〜〜〜にもったいないです。

次に出てくるのは

「Progateがいいのは分かったけど無料版と有料版どっちをやればいいの?」

という疑問ですが、無料版を解き終わった瞬間に有料版をやってください。笑

 

たった月1000円で出来ますし、

1〜2ヶ月もあればHTML/CSS/JavaScriptは2~3周できるでしょう。

 

 

そして、ここでやっちゃいけないのは、

「Rubyが良いって聞いたからRubyもやらなきゃ!」

「Javaが一番使われてるみたいだからJavaもやらなきゃ!」

といろいろやりたくなってしまうことです。

 

出鼻をくじくようですが、

Progateで出来ることは初歩の初歩です。

複数言語の初歩の初歩を理解しても正直なところ無駄です。

 

ここで重要なのは1つの言語に絞って

完璧に理解することです。

 

例えばProgateのJavaScriptの内容を完璧にマスターしておけば

実際の開発現場に入った際に、仕事に慣れる速度が

圧倒的に変わってきます。

よくベテランエンジニアの方が

「Progate(もしくは他の学習サイト)なんてやっても無駄」

と仰っているため、

「やっても意味ないんだ!じゃあやらない!」

と自分に都合の良い解釈をしてしまうケースも多いですが

 

実際は、「これくらいの知識は知ってて当然、これがゴールではない」

というニュアンスが含まれているので

初学者の方はとりあえず、ヒントを見ずに解けるくらいまでは最低限やりましょう。

 

 

ちなみに実際にPCの操作を自動化して生活に落とし込みたい方は

HTML/CSS/JavaScriptではなく

Pythonをやることを強くおすすめします。

 

■ 最後に

プログラミング言語はたくさんあるので

言語選択に悩む方も多いと思いますが

結局どの言語も、書き方が違うだけで

やりたいことはあまり変わらないので

とりあえず、JavaScriptかPythonでいいです。

私もメインはJavaScriptで

まれにJavaやAngularJSやPythonを触りますが

結局似たようなものなので、すぐ慣れました。

 

これはJavaScriptという土台があったので

これまでの知識を流用することで対応できた、ということです。

 

簡単に例えると

「野球がめっちゃ上手い人は、ソフトボールにもすぐ慣れる」

ということです。

 

あなたの中での"野球"はJavaScriptかPythonにしましょう。

 

 

 

ちなみに全然関係ないのですが

SNSで「#駆け出しエンジニアと繋がりたい」

というタグを付けて、魅力的な経歴や年収を

プロフィールに書いている人の9割は

詐欺及びマルチの勧誘です。

 

自称エンジニアの方からDMとかよく届くと思いますが、

全員ブロックしてください。笑

 

 

現場からは以上です!

Pythonのtype関数の使い方


【type関数とは】
データの型を確認するための関数
組み込み関数なので、デフォルトで使用可能です

【構文】
type(データ)

このようにするだけで簡単に確認できます

【実際にスクリプトを動かしてみましょう】

____________________
■type_test.py
# 文字列
data1 = "hello"
# 数値
data2 = 1234
# バイト
data3 = b'\x00\x1C'
# 16進数
data4 = data3.hex()
# 配列
data5 = ["apple", "orange", "grape"]
# オブジェクト
data6 = {"name": "あき", "job": "Engineer"}
# 真偽値
data7 = True
# からっぽ
data8 = None

print(type(data1))
# 【出力結果】<class 'str'>
print(type(data2))
# 【出力結果】<class 'int'>
print(type(data3))
# 【出力結果】<class 'bytes'>
print(type(data4))
# 【出力結果】<class 'str'>
print(type(data5))
# 【出力結果】<class 'list'>
print(type(data6))
# 【出力結果】<class 'dict'>
print(type(data7))
# 【出力結果】<class 'bool'>
print(type(data8))
# 【出力結果】<class 'NoneType'>
____________________

このように、確認することが可能です。

Pythonは比較的データ型に厳しい言語なので、
期待動作をしない際は、想定している型と相違がないかを確認しましょう。

現場からは以上です!

Pythonにコマンドライン引数を渡す方法について解説していきます。


■ コマンドライン引数とは?
コマンドライン(ターミナル)から実行ファイル(今回はPython)に渡す引数


■ sys.argvを使おう!
sys.argvとは
Python標準のコマンドライン引数を扱うモジュール


■ Pythonファイルを用意しよう!
実験用にargsPrint.pyというファイルを作りましょう。

____________________
import sys

# コマンドライン引数を扱うモジュール
args = sys.argv

print(args)

# 渡された引数を1つずつ出力する
for arg in args:
    print(arg)

____________________

■ コマンドライン引数を渡して実行してみよう!

コマンドライン引数の渡し方
%渡したいコマンド 引数1 引数2 引数3...
____________________

% python3 argsPrint.py Hello Hi Konnichiwa

['argsPrint.py', 'Hello', 'Hi', 'Konnichiwa']
argsPrint.py
Hello
Hi
Konnichiwa

____________________


■ 応用編:configファイルの設定を読み込み、Pythonに渡そう

今回覚えたことを流用して以下の処理を作ってみましょう!

①configファイルに変数登録
②シェルスクリプトでconfigファイルを読み込み
③コマンドライン引数をPythonに渡す

____________________

■config.ini
NAME=あきぶろぐ
AGE=28
JOB=エンジニア
NOW=`date "+%Y-%m-%d %H:%M:%S"`

____________________
■argsPrintCall.sh
#!/bin/zsh
# ファイルの読み込み。sourceを使っても省略形の"."を使ってもいい
# . ./config.ini
source ./config.ini

python3 argsPrint.py $NAME $AGE $JOB $NOW

____________________
■argsPrint.py
import sys

name = args[1]  # $NAME
age = args[2]   # $AGE
job = args[3]   # $JOB

print("名前:" + name)
print("年齢:" + age)
print("職業:" + job)
print("時刻:" + now)

____________________

■ 実行してみよう!
____________________

% chmod 777 argsPrintCall.sh
% ./argsPrintCall.sh
名前:あきぶろぐ
年齢:28
職業:エンジニア
時刻:2021-06-21 21:29:57

____________________


現場からは以上です👾