Pythonスクリプトでbashコマンドを実行する方法

Pythonスクリプトでbashコマンドを実行する方法

sudo apt updatePythonスクリプトで複数の引数(例: "")を使用してbashコマンドを起動するには?

答え1

@milneの答えはうまくいきますが、subprocess.call()フィードバックはほとんどありません。

subprocess.check_output()私はstdoutに印刷された内容を分析できるように、次のものを使用することを好みます。

 import subprocess
 res = subprocess.check_output(["sudo", "apt", "update"])
 for line in res.splitlines():
     # process the output line by line

check_outputコマンド呼び出しがゼロで終了するとエラーが発生します。

bash関数にキーワード引数を指定しないと、これは呼び出しや他のシェルを呼び出しません(Call the commandshellの場合も同様です。)subprocess.call()

Pythonで(他の)コマンド呼び出しがたくさんある場合は、次のことを検討することをお勧めします。リーダー。これにより、(IMO)が読みやすくなります。

from plumbum.cmd import sudo, apt, echo, cut

res = sudo[apt["update"]]()
chain = echo["hello"] | cut["-c", "2-"]
chain()

答え2

bashをプログラムとして使用し、-cパラメーターを使用してコマンドを実行できます。

例:

bashCommand = "sudo apt update"
output = subprocess.check_output(['bash','-c', bashCommand])

答え3

これサブプロセスモジュールは以下を行うように設計されています。

import subprocess
subprocess.call(["sudo", "apt", "update"])

コマンドが失敗したときにスクリプトを終了するには、check_call()戻りコードを直接解析するのではなく、次を使用することをお勧めします。

subprocess.check_call(["sudo", "apt", "update"])

答え4

Python 3.5以降では、次のものを使用できます。

import subprocess

try:        
    result = subprocess.run("sudo apt update", check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except subprocess.CalledProcessError as err:
    raise Exception(str(err.stderr.decode("utf-8")))
except Exception as err:
    raise Exception(err)
else:
    return result.stdout.decode("utf-8")

関連情報