[Bash] Holen Sie sich die Kraft von Python aus Bash mithilfe der folgenden Dokumentation

Einführung

Das Parsen von Dateien mit Shell ist ziemlich schwierig. Sie können Ihr Bestes tun, um mit regulären Ausdrücken zu schreiben, aber meistens vergessen Sie den Inhalt. Es gab einen Fall, in dem ich mit Hilfe von Python-Modulen aus den Schwierigkeiten regulärer Ausdrücke herauskommen konnte. Dies ist der Rekord zu dieser Zeit.

Umgebung

Was soll ich konkret tun?

Verwenden Sie die Hear-Dokumentation von bash, um Python-Code in Python-Befehle einzufügen.

shellscript


python <<EOF

#Python-Code

EOF

Ich werde hier nicht über das Hördokument von Bash schreiben. Wenn Sie mehr wissen möchten, überprüfen Sie dies bitte selbst.

Stichprobe

Unten ist ein Beispiel. Es ist ein Shell-Skript, das das configparser-Modul von Python verwendet, um die conf-Datei für MySQL zu analysieren und eine Verbindung zu MySQL herzustellen.

connect_mysql.sh



#!/usr/bin/env bash
#
# Connect to MySQL

declare -r COLOR_RED="\e[33;41;1m"
declare -r COLOR_OFF="\e[m"
declare -r DB_CONFIG_PATH='path/to/database.conf'
# check file exists or not
if [ ! -f "${DB_CONFIG_PATH}" ]; then
  echo -e "${COLOR_RED}[error] \"${DB_CONFIG_PATH}\" does not exist.${COLOR_OFF}"
  exit 1
fi

declare -r SECTION=$1
# check argument
if [ -z "$SECTION" ]; then
  echo -e "${COLOR_RED}[error] Please set section name as command argument.${COLOR_OFF}"
  exit 1
fi


#######################################
# Parse DB config by python
# Globals:
#   DB_CONFIG_PATH
#   SECTION
# Arguments:
#   None
# Returns:
#   None
#######################################
function parse_ini_file () {

  python3 <<'EOF' - "${DB_CONFIG_PATH}" "${SECTION}"

import sys
import configparser

file_path    = sys.argv[1]
section_name = sys.argv[2]

config = configparser.ConfigParser()

config.read(file_path)

try:
    details = config[section_name]
except KeyError:
    sys.exit(1)

db_option = \
    '[client]\\nhost={host}\\nport={port}\\ndatabase={database}\\nuser={user}\\npassword={password}\\n'\
    .format(\
        host=details['host'],\
        port=details['port'],\
        database=details['database'],\
        user=details['user'],\
        password=details['password']\
    )

sys.stdout.write(db_option)
sys.exit(0)

EOF


}

db_option=$(parse_ini_file)

if [ $? -ne 0 ]; then
  echo -e "${COLOR_RED}[error] Section \"${SECTION}\" does not exist in config file.${COLOR_OFF}"
  exit 1
fi

mysql --defaults-extra-file=<(echo -e ${db_option})

Es scheint, dass Sie so etwas wie "Python-Dateiname Argument 1 Argument 2" auch im Anhörungsdokument tun können, indem Sie die folgenden Schritte ausführen.


python3 <<'EOF' - "${DB_CONFIG_PATH}" "${SECTION}"
...
EOF

abschließend

Ich hoffe es hilft jemandem.

Recommended Posts

[Bash] Holen Sie sich die Kraft von Python aus Bash mithilfe der folgenden Dokumentation
Ich möchte ein Glas aus Python verwenden
Verwenden Sie thingspeak aus Python
Verwenden Sie fließend Python
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Studie aus Python Hour7: Verwendung von Klassen
Verwenden Sie MySQL aus Python
Verwenden Sie MySQL aus Python
Ich möchte Ceres Solver aus Python verwenden
Verwenden Sie BigQuery aus Python.
Verwenden Sie Tor, um eine Verbindung von urllib2 [Python] [Mac] herzustellen.
Python: Entpacken Sie die Standardeingabe mit zipfile
Verwenden Sie os.getenv, um Umgebungsvariablen in Python abzurufen
Verwenden Sie mecab-ipadic-neologd von Python
Verwendung des interaktiven Python-Modus mit Git Bash
Ich wollte die Python-Bibliothek von MATLAB verwenden
Post von Python nach Slack
python3: Verwendung der Flasche (2)
Flirte von PHP nach Python
[Python] Verwendung von Liste 1
Verwenden Sie MySQL von Anaconda (Python)
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwenden Sie die e-Stat-API von Python
Verwendung von Python-Bytes
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Rufen Sie Matlab von Python zur Optimierung auf
Verwenden Sie httpie von Windows Git Bash
Python: So verwenden Sie Async mit
Verwenden Sie Stanford Core NLP von Python
Wie man SWIG von waf benutzt
Link, um mit Python zu beginnen
[Python] Verwendung der Pandas-Serie
Post von Python auf Facebook Timeline
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Lesen und verwenden Sie Python-Dateien aus Python
So erhalten Sie die Python-Version
Verwenden Sie zwangsweise Google Translate aus Python
Erste Schritte mit Python
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
[Einführung in Python] Verwenden wir Pandas
Python (vom ersten Mal bis zur Ausführung)
Verwenden Sie die kabu Station® API von Python
Poste ein Bild von Python auf Tumblr
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt