5

ソフトウェアをパッケージ化するPythonスクリプトを作成しようとしています。このスクリプトは、製品をビルドしてパッケージ化する必要があります。現在、cshスクリプトやperlスクリプトなど、各部分を個別に実行する他のスクリプトがあります。そのようなスクリプトの1つは、次のように実行されます。

sudo mod args

ここで、modはperlスクリプトです。だからPythonで私はします

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)

問題は、このmodスクリプトにいくつかの質問に答える必要があることです。このために私は伝統的な

(stdout, stderr) = proc.communicate(input='y')

動作します。Popenが制御しているプロセスはsudoであり、質問をしているmodスクリプトではないため、機能していないと思います。modスクリプトと通信し、それをsudoで実行する方法はありますか?

4

4 に答える 4

4

呼び出しからを削除しsudoスクリプトのユーザーに入力を要求する必要があると思います。Popensudo

これにより、スクリプトを内部に隠すのではなく、スクリプトで昇格された特権の必要性がより明確になりますPopen

于 2008-10-30T16:26:41.877 に答える
4

私は Pexpect を選択します。

import pexpect
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q')
child.expect ('First question:')
child.sendline ('Y')
child.expect ('Second question:')
child.sendline ('Yup')
于 2008-10-30T23:10:26.727 に答える
1

最も簡単な方法は、を介して制御スクリプト(Pythonスクリプト)を実行することですsudo。あなたはそれをすることができますか、それともそれは選択肢ではありませんか?

于 2008-10-30T16:22:51.353 に答える
0

もっと情報が必要です。

  1. sudo はパスワードを要求していますか?
  2. 質問をするための mod スクリプトには、どのような種類のインターフェイスがありますか?

この種のことは、パイプ上で通常どおりに処理されないためです。

これらの両方の解決策は、パスワードを要求するおかしなスクリプトやその他のさまざまな入力の問題を処理するのにかなりの専門家であるPexpectである可能性があります。

于 2008-10-30T17:29:43.060 に答える