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작업을 수행할 수 있는 능력이 매우 뛰어납니다.

관련 정보