頼りになるコマンドライン言語としてBashをPythonに置き換える方法

私はbashと少し愛と憎しみの関係を持っています。私はターミナルで多くの時間を過ごします、そしてbashは私のデフォルトの「プログラミング言語」です。時々私は、grepとxargsがインフラストラクチャを実行していることを人々に伝え、彼らは私が本気であることに気付くまで笑い、笑います。

Pythonを入手することは、システム管理者にとって最適な選択です。また、ターミナルで何かを処理する必要があるが、bashを使用したくない場合や、bashには複雑すぎるニーズがある場合にも最適です。タスクが超えたら

find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"

Pythonを解き放つ時が来ました!

コマンドライン言語に移動するときにPythonを使用することには多くの利点があります。

  • Pythonには、ほとんどすべてのことを支援するための優れたライブラリがたくさんあります。これには、システム操作の処理、ファイルの読み取り、ディレクトリの一覧表示、forループの書き込み、終了コードの確認などが含まれます。
  • IDEでオートコンプリートします。真剣に。誰が何かを暗記しなければならないのですか?
  • それがあなたのものである場合は堅牢なテストスイートです(そうでない場合は、それをあなたのものにすることを検討する必要があります)。
  • iPythonコンソール。素晴らしいです。すごい。大好きです。
  • Pythonはほとんどのシステムで利用できますが、そうでない場合はMinicondaで入手できます。
  • tryおよびcatchブロックによる堅牢なエラーチェック。
  • さまざまなオペレーティングシステムで作業している場合は、内部ですべてを処理するPythonライブラリを使用できます。
  • プログラミング能力がなくても、Pythonは簡単に始められる言語です。

始めましょう

開始するには、まずPythonをインストールするか、Minicondaを使用してインストールする必要があります。

iPythonがインストールされているかどうかを確認します

which python which ipython 

これらの両方が成功した場合、あなたはビジネスにあります!Pythonはあるが、iPythonがない場合は、インストールする必要があります。システムパッケージとしてインストールすることもできますが、Minicondaを使用してインストールすることを強くお勧めします。

Minicondaをインストールします

ここでOSのインストーラーを入手してください。Python3をインストールすることをお勧めします。

次に、それは単純なインストールです。

bash Miniconda3-latest-Linux-x86_64.sh 

プロンプトに従ってください。Miniconda3がインストールされます。インストールしたら、更新を実行する必要があります。これは技術であり、もちろん更新を実行するためです。;-)

conda update conda conda config --add channels conda-forge conda update -y --all conda install -y ipython 

トラブルシューティング

パッケージのインストールに問題がある場合は、ここにいくつかのヒントがあります。

  • 実行conda clean --allして再試行してください。
  • 正しいチャネルを使用していることを確認してください。
  • 実行 conda update -y --all
  • グローバルコンダスペースへのインストールはできるだけ少なくしてください。代わりに、さまざまなタスクやプロジェクト用の環境を作成します。これについては次に説明します。

Condaで環境を作成する

virtualenv、pipenv(それは問題ですか?)、Rbenv、plenv、anyenv、または何年にもわたってポップアップした他のさまざまなenvを使用したことがある場合、これは非常に馴染み深いものに聞こえます。アイデアは、異なるプロジェクトが独自の分離されたソフトウェア環境を持つべきであるということです。

conda create -n my-project ipython package1 package2 package2 

あなたが私のようで、iPythonをすぐに利用できるようにしたい場合は、新しい環境にインストールしてください。

システム管理用のPythonライブラリ

例に入る前に、いくつかの便利なパッケージとそのドキュメントをリストしましょう。

私のgotoパッケージはosパッケージです。これを使用して、ディレクトリの一覧表示、ファイルの存在の確認、シンボリックリンクの存在の確認、ディレクトリの作成、システムコマンドの実行、環境変数の取得と設定などを行うことができます。それは素晴らしい!

便利なPythonライブラリとして存在しないシステムコマンドを実行するための2番目のパッケージは、サブプロセスモジュールです。

シャットダウンには、OSライブラリにないファイル操作があります。

pprintライブラリは、複雑なデータ構造を適切なインデントで出力します。

pytestライブラリを使用すると、Pythonコードをテストできます。これに直面してみましょう。最初の(数回)は正しく機能しません。

コードを実行するにはどうすればよいですか?

最後に!コード!

スクリーンショット-2019-12-13-10.33.52

システム管理にPythonを使用している場合は、iPythonコンソールに直接アクセスするか、スクリプトを記述してからを使用して実行できますpython name-of-script.py

スクリプトを作成することを好む場合は、非常に多くの選択肢があり、それは本当に個人的な好みの問題です。私は有料のPyCharmを使用していますが、Visual StudioCodeとAtomも同様に優れた無料の選択肢です。

それは私が取り組んでいることに依存していることがわかります。iPythonコンソールを開いて入力を開始する場合もあれば、テストなどでより堅牢なものが必要な場合もあります。

iPythonコンソールまたは上記のエディターのいずれかを使用している場合は、オートコンプリートがあります。オートコンプリートは素晴らしいです!iPythonを使用すると、関数の入力を開始し、Tabキーを押して、必要な可能性のある関数のリストを取得できます。

スクリーンショット-2019-12-13-10.49.07

オートコンプリートがどれだけ好きかは表現できません。;-)

助けを得ます

任意のライブラリの任意のドキュメントページに移動できますが、ライブラリまたは関数の名前がわかっている場合は、iPythonで表示できます。

スクリーンショット-2019-12-13-10.55.14

スクリーンショット-2019-12-13-10.55.55

You can bring up the help menu in most IDEs and text editors too, but that will be specific to your editor.

Examples

First you will need to import your packages

import os import subprocess import shutil from pprint import pprint 

Here are some examples of common file and directory operations.

# Get your current working directly # This returns a string my_cwd = os.getcwd() print(my_cwd) 
# List the contents of a directory # This returns a list dir_list = os.listdir() for item in dir_list: print(item) 
# Get the Absolute Path name of a file (file + current working dir) os.path.abspath('some-file') 
#Get the basename - returns file os.path.basename('/path/to/file') 
# Split a directory path - platform independent os.path.split(os.getcwd()) # Out[17]: ('/Users', 'jillian') 
# Check if a path exists os.path.exists('/path/on/filesystem') 
# Check if a path is a symlink os.path.islink() 

Move files and directories around

# Copy a directory # cp -rf shutil.copytree('src', 'dest') 
# Copy a file # cp -rf shutil.copyfile('file1', 'file2') 
# Move a directory # mv shutil.move('src', 'dest') 

Not everything is going to be available through python libraries, such as installing system libraries, so run a few system commands!

# Run an arbitrary system command command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) #Print the stdout and stderr print(result.stdout) print(result.stderr) 

Write to files!

# Write to a file (and create it if it doesn't exist) # echo "hello" > hello.txt f= open("hello.txt","w+") f.write("hello!") f.close() 
# Append to a file # echo "hello" >> hello.txt f = open("hello.txt", "a+") f.write("hello again!") f.close() 

Write some tests!

Tests mostly work by using a function called assert, which is essentially saying make sure this is true and if not die loudly.

def test_system_command(): """Test the exit code of a system command""" command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE) assert result.returncode == 0 

Put this function in a file called test_my_code.py and run as pytest test_my_code.py.

Wrap Up

That's it for my main tips and tricks for using Python as your go-to bash replacement. The next time you need to write a loop in bash, consider breaking out the iPython console and seeing what you can come up with instead!