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