パイプを含むOSコマンド実行をPythonでやる

(Ansibleモジュール内で)PythonからOSコマンドを実行させるには3通りある。

  1. os.system(cmd_str)
  2. subprocess.Popen(cmd_str, shell=True, stdout=subprocess.PIPE …)
  3. ansible.module_utils.basic.run_command(cmd_str)

この中でcmd_strにパイプが入るもの(あるプロセスのstdoutを別プロセスのstdinにつなげるもの)を実行する場合は、os.system()にて呼び出す必要がある。
https://stackoverflow.com/questions/7353054/running-a-command-line-containing-pipes-and-displaying-result-to-stdout

単純なコマンドの実行ならよいかもしれないが、ちょっと凝ったことを使用とすると注意が必要。
subprocessやansible_moduleの場合は、パイプを”|”として解釈してしまう。
(bashとして動いているわけではなさそうで、他にもプロセス置換”<(cmd)"も展開されない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です