os.system コマンド内の変数として出力を読み込みます。

os.system コマンド内の変数として出力を読み込みます。

pythonLinux上で実行されるスクリプトがあります。コマンドの出力をキャプチャして変数に保存し、出力を印刷する必要があります。以下のコード -

#!/usr/bin/python
import os, time
systime=os.popen('date +"%m-%d-%y-%T"').read()
os.system("read c1 c2 c3 c4 c5 c6 < <(sar -u 1 1 | awk 'NR==4, NR==4 {print $4, $5, $6, $7, $8, $9}')")
os.system("echo $systime,$c1,$c2,$c3,$c4,$c5,$c6 >> outputfile.txt")

私はreadコマンドを使用して、コマンドによって提供された出力をsar -u 1 1 | awk 'NR==4, NR==4 {print $4, $5, $6, $7, $8, $9}')6つの変数に収集しました。c1, c2, c3, c4, c5 c6上記のコードを実行しようとすると、次のエラーが発生します。

sh: -c: line 0: syntax error near unexpected token `<'

os.popen代わりに試してみましたos.systemが、まだ同じエラーが発生しました。命令を使って変数を保存する方法os.systemと、後で活用する方法を教えてください。私の目標は、すべての変数(キャプチャされた時間を含む)を出力ファイルとして印刷することですoutputfile.txt。ティア

ベストアンサー1

<(...)ksh構文はzshandでも認識されますが、bashリダイレクトターゲットとして使用されている場合はzshandでのみサポートされますbash

とにかくこれはsh構文ではありません。 Pythonはos.system()与えられたコマンドラインを解釈するためにos.popen()実行されます。shこれらのコマンドを呼び出すたびに新しいシェルが実行されるため、ここで定義されている変数は次のシェル呼び出しでは使用できません。そして、python変数は自動的にシェル変数になりません。

ここでは、次のことができます。

os.system("""
  sar -u 1 1 |
    awk -v t="$(date +%m-%d-%y-%T)" -v OFS=, '
      NR==4 {
        print t, $4, $5, $6, $7, $8, $9
      }' > outputfile.txt""")

内部(またはシェル)から呼び出すdateことはawk愚かなように感じますが、それ自体pythonではpython仕事をする能力は非常に優れています。

おすすめ記事