python
Linux上で実行されるスクリプトがあります。コマンドの出力をキャプチャして変数に保存し、出力を印刷する必要があります。以下のコード -
#!/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構文はzsh
andでも認識されますが、bash
リダイレクトターゲットとして使用されている場合はzsh
andでのみサポートされます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
仕事をする能力は非常に優れています。