subprocess.Popenでサブサブプロセスと通信することは可能ですか?

StackOverflow https://stackoverflow.com/questions/250700

  •  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スクリプト)を実行することです。それができますか、それとも選択肢ではありませんか?

詳細情報が必要です。

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

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

これらの両方の解決策は、 Pexpect かもしれません。パスワードを要求するスクリプト、およびその他のさまざまな入力の問題。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top