0

Ubuntuで前提条件のソフトウェアをチェックし、インストールされていない場合は先に進んでインストールするスクリプトを作成しようとしています。

私はPythonの初心者であり、Pythonのsubprocessモジュールを使用してこの目標を達成できることを理解しています。

私はこれをサンプルコードの下に書きましたが、なぜ失敗するのかわかりません。

import subprocess
c = subprocess.Popen(['sudo','apt-get','install','git'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
grep_stdout = c.communicate(input='root')[0]
print(grep_stdout)

このプログラムを実行すると、次のエラーが発生します...

sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

私はここで何かが欠けていますか?

4

2 に答える 2

4

かなりの量の前提条件があります。ユーザーにすべてをインストールするように頼むのは首の痛みだと思っただけです。だから、ソフトウェアをテストする関数を書くことを考えただけで、インストールされていないものがあれば、彼のためにインストールします

これにはいくつかのアプローチがあります。

  1. ソフトウェアがそこにあるかどうかを確認します。ソフトウェアがプログラムを終了しない場合は、インストールする不足しているコンポーネントをリストしたメッセージが表示されます。

  2. インストールする必要のあるソフトウェアのリストREADMEまたはドキュメントを提供します。

  3. 必要な依存関係をリストしたdebianパッケージを作成します。そして、ユーザーに好みの方法でこれをインストールしてもらいます。

プログラムがソフトウェア自体をインストールする必要がある場合(本当にインストールする必要がありますか?)、昇格された特権でスクリプトを実行するようにユーザーに指示します。ドキュメントで、として実行するように依頼しますroot

ちなみに、sudoすべてのシステムにインストールされているとは限りません。

于 2012-06-25T09:01:24.560 に答える
1
import subprocess

c = subprocess.Popen(['sudo','yum','install','git','-y'], 
stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
grep_stdout = c.communicate(input='root')[0]

print(grep_stdout)
于 2020-02-26T10:44:38.877 に答える