其实,并不是你想的那样,因为testpy,也不是实时输出,只有在每次输出,清空一下stdout才能看到你想看到的效果。
testpy
import sysimport timefor i in range(1,10): print i sysstdoutflush() timesleep(1)
import subprocesssubp=subprocessPopen('python testpy',shell=True,stdout=subprocessPIPE)c=subpstdoutreadline()while c: print c c=subpstdoutreadline() print subpreturncode
这样,你观察很明显,如果你将sysstdoutflush(),删除,你会发现都是最后一刻才输出,因为print时代缓冲的。
不太明白你表达的意思,是无法看到错误信息还是想保存错误信息?
1、一般来讲,shell命令都是有错误输出的,它会打印在屏幕上,但实际上是标准错误输出文件,如果我不想输出到屏幕,而是写到文件里,我们可以用管道符'>'重定向标准错误输出,比如:
我cat一个不存在的文件,会有错误输出,我可以把错误重定向到文件里
#cat /tmp/aacat: /tmp/aa: No such file or directory
#cat /tmp/aa 2>errlog
#cat errlog
cat: /tmp/aa: No such file or directory
2表示标准错误输出。
另外,我甚至可以把错误输出放到shell变量里:
#aa=$(cat /tmp/aa 2>&1)#echo $aa
cat: /tmp/aa: No such file or directory
2>&1表示,我把错误输出重定向到标准屏幕输出1上,在赋值给变量aa
2、关于如何调试shell脚本
很简单
#sh -vx xxxxsh上述命令会打印shell脚本的执行过程和结果,有助于排错。当然,某些情况下,可能不会有输出(如shell中有函数,可能就不会输出函数里的过程)。
shell脚本里$0代表程序名,$1代表命令行传来的第一个位置参数,$2代表代表命令行传来的第二个位置参数,同理类推。
例如
#!/bin/bashecho "程序名:$0"
echo "参数1:$1"
$sh testsh 1111
输出结果为:
程序名: testsh
参数1:1111
以上就是关于命令,怎样做到及时的获取shell命令输出内容全部的内容,包括:命令,怎样做到及时的获取shell命令输出内容、如何获取shell命令输出的错误信息、shell程序中怎么获取调用参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)