そのため、サブプロセスを使用してPythonスクリプト内からプロセスをスーパーユーザーとして実行しようとしています。ipythonシェルでは、次のようなものです
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 は shell=True の場合、文字列と同じようにいくつかのコマンドで動作しますが、
proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])
sudo を機能させるには、「shell=True」を使用しません。
ありがとう!