sudo apt update
Pythonスクリプトで複数の引数(例: "")を使用して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")