サブプロセスを使用してpythonスクリプト内からスーパーユーザーとしてプロセスを実行しようとしています。 ipythonシェルでPythonスクリプトからスーパーユーザーとしてコマンドを実行しています
proc = subprocess.Popen('sudo apach2ctl restart',
shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
のようなものが正常に動作しますが、できるだけ早く私は、スクリプトにそれを固執するように私は取得を開始:sudo: apach2ctl: command not found
。
これは、sudoがubuntuの環境を処理する方法によるものだと思います。 (私も無駄にsudo -E apche2ctl restart
とsudo env path=$PATH apache2ctl restart
を試してみた)
だから私の質問は、私は必要なときに、スーパーユーザーのパスワードをユーザに促し、スーパーユーザーとしてapache2ctl restart
を実行したい場合は、どのように私はやって行けば、基本的にはこの?私はスクリプトにパスワードを格納するつもりはない。
編集:
私は両方の文字列などのコマンドに渡してみましたし、リストにトークン化しました。 Pythonインタプリタでは、文字列を使ってパスワードのプロンプトが正しく表示されます(私の元の問題のようにPythonスクリプトでは動作しません)。リストはsudoのヘルプ画面を表示します。
編集2:だから
は私が集まるpopenのはただの文字列など、いくつかのコマンドを使用して動作しますが、シェルは= Trueの場合、それはsudoを得るために「=真の殻」なし
proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])
を取るときということです働く
ありがとうございます!
パスワードを要求せずにこのコマンドを実行できるようにsudoを設定する方法はありますか? –
あなたは何をしているのかに応じて['proc.wait()'](https://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait)を使いたいかもしれません。子プロセスの実行が終了するまで、「待機」は進まない。 – craymichael