BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

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

私はbashと少し愛と憎しみの関係を持っています。私はターミナルで多くの時間を過ごします、そしてbashは私のデフォルトの「プログラミング言語」です。時々私は、find、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を使用してインストールすることを強くお勧めします。

ミニコンダをインストール

ここで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を実行します
  • グローバルコンダスペースへのインストールはできるだけ少なくしてください。代わりに、さまざまなタスクやプロジェクト用の環境を作成します。これについては次に説明します。
コンダで環境を作成する

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コードをテストできます。これは、Pythonコードに直面して、最初の(数回)は正しく機能しないためです。

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

ついに!コード!

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

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

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

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

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

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

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

ヘルプを見る

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

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

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

ほとんどのIDEやテキストエディタでもヘルプメニューを表示できますが、それはエディタに固有のものになります。

まず、パッケージをインポートする必要があります

import os
import subprocess
import shutil
from pprint import pprint

一般的なファイルおよびディレクトリ操作の例を次に示します。

# 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()

ファイルとディレクトリを移動する

# 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')

システムライブラリのインストールなど、すべてがPythonライブラリで利用できるわけではないので、いくつかのシステムコマンドを実行してください!

# 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 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()

いくつかのテストを書いてください!

テストは主にassertと呼ばれる関数を使用して機能します。これは基本的に、これが真実であることを確認し、大声で死なない場合はそれを意味します。

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

この関数をtest_my_code.pyというファイルに入れます pytest test_my_code.pyとして実行します 。

まとめ

Pythonをbashの代わりに使用するための主なヒントとコツは以上です。次回bashでループを作成する必要がある場合は、iPythonコンソールを分割して、代わりに何ができるかを確認することを検討してください。


  1. コマンドラインを介したPythonMatplotlibによるインタラクティブなプロット

    インタラクティブなプロットを取得するには、フィギュアをアクティブにする必要があります。 plt.ioff()の使用 およびplt.ion() 、プロットを使用してインタラクティブなアクションを実行できます。 Ipythonを開きます シェルを選択し、シェルで次のコマンドを入力します。 例 In [1]: %matplotlib auto Using matplotlib backend: GTK3Agg In [2]: import matplotlib.pyplot as In [3]: fig, ax = plt.subplots() # Diagram will pop up.

  2. AndroidデバイスでCyanogenModをLineageOSに置き換える方法

    死にゆくCyanogenModからその精神的な後継者であるLineageOSへの大規模な移行が起こっています。 (理由と方法に関するすべての情報があります。)数百万、または少なくとも数十万のルート化されたAndroidユーザーは、CyanogenModと同様に、肥大化のない柔軟なバージョンを提供するオープンソースプロジェクトに移行しています。在庫のAndroidエクスペリエンスの。 素晴らしいニュースは、LineageOSエクスペリメンタルビルドを使用して、切り替えをかなりシームレスに行えることです。 TWRPリカバリを使用しますが、一般的なプロセスは他のリカバリツールでも同様です。 まず