subprocess.Popenでサブサブプロセスと通信することは可能ですか?
-
05-07-2019 - |
質問
ソフトウェアをパッケージ化する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を介して実行する方法はありますか?
解決
私は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')
他のヒント
Popen
呼び出しで sudo
を削除し、あなたのスクリプトのユーザーに sudo
。
これにより、 Popen
内にスクリプトを隠すのではなく、スクリプトでの昇格した権限の必要性がより明確になります。
最も簡単なことは、 sudo
を介して制御スクリプト(Pythonスクリプト)を実行することです。それができますか、それとも選択肢ではありませんか?
詳細情報が必要です。
- sudoはパスワードの入力を求めていますか?
- 質問をするためのmodスクリプトにはどのようなインターフェースがありますか?
これらの種類のものは、パイプ上で通常どおりに処理されないため。
これらの両方の解決策は、 Pexpect かもしれません。パスワードを要求するスクリプト、およびその他のさまざまな入力の問題。
所属していません StackOverflow