我有一个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
。 TIA
答案1
<(...)
ksh 语法也被zsh
and识别bash
,但当用作重定向的目标时,它仅被zsh
and支持bash
。
无论如何,这不是sh
语法。 Python 的os.system()
and os.popen()
do runsh
来解释给定的命令行。这些命令的每次调用都会运行一个新的 shell,因此其中定义的一个变量在下一个 shell 调用中将不可用。而且python
变量不会自动成为 shell 变量。
在这里,你可以这样做:
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
and awk
(甚至是 shell)感觉很愚蠢,但python
whilepython
本身非常有能力完成它们的工作。