我在 bash 脚本中有一系列管道命令,将标准输出管道到标准输入:
prog1 | prog2 | prog3
Run Code Online (Sandbox Code Playgroud)
他们每个人都输出一些标准错误。他们中的一些输出覆盖前一行,一些没有,有些两者都做:例如输出几行输出,然后在shell中有一个更新的“状态栏”。例如,curl 可以将下载进度输出为状态栏。
输出相当不清楚,因为状态栏可能会在一个进程的输出和另一个进程的输出之间闪烁。
有没有办法让各种输出更清晰,例如
闪烁示例:
我有一些python脚本每天在cron中运行.如果我的脚本中出现STDERR OUTPUT,我怎么能让cron给我发电子邮件?我希望能够邮寄多个收件人,并为每个cron条目单独设置主题行.
我试过这个:
./prog > /dev/null | mail . . .
Run Code Online (Sandbox Code Playgroud)
但它不起作用 - 当没有STDERR时我仍然收到空白的电子邮件.我是否需要在脚本本身中执行此操作?
对不起,如果这看起来很基本,我已经google了很多但似乎无法找到这个简单的回答.
我想记录Python脚本的所有输出.我试过了:
import sys
log = []
class writer(object):
def write(self, data):
log.append(data)
sys.stdout = writer()
sys.stderr = writer()
Run Code Online (Sandbox Code Playgroud)
现在,如果我"打印'某些东西'"它就会被记录下来.但是,如果我做了一些语法错误,比如说"打印'某些东西#",它就不会被记录 - 它将进入控制台.
我如何捕获Python解释器中的错误?
我看到了一个可能的解决方案:
http://www.velocityreviews.com/forums/showpost.php?p=1868822&postcount=3
但第二个例子登录到/ dev/null - 这不是我想要的.我想将它记录到像我上面的例子或StringIO这样的列表中......
另外,我最好不要创建子进程(并在单独的线程中读取它的stdout和stderr).
Fabric v1.4.3不捕获'python --version'的输出
def python_v():
m = local('python --version', capture=True)
print(m)
Run Code Online (Sandbox Code Playgroud) 我正在努力理解stdin stdout和stderr.
我看到它们一直用在人们的代码中,我无法完全理解它们是什么.我假设他们与输入/输出有关,但一直在网上寻找解释,但找不到.有没有人知道与解释的良好联系,或者它是否足够简单来解释它对我来说是一个很大的帮助.
因为我正在学习Python 3,所以这方面的例子会有所帮助.
我是Perl的新手,想知道prg在以下场景中运行外部命令(调用它)的方法:
prg,stdout只得到它.prg,stderr只得到它.prg,得到了stdout和stderr,分别.是否有可能将INFO或DEBUG的python日志消息转到stdout,使用WARNING或更高版本转到stderr?
我需要在bash脚本中捕获命令的输出和错误,并知道命令是否成功.
目前,我正在捕捉这两个:
output=$(mycommand 2>&1)
Run Code Online (Sandbox Code Playgroud)
然后我需要检查mycommand的退出值.如果失败了,我需要对输出做一些事情,如果命令成功,我不需要触摸输出.
由于我正在捕获输出,检查$?因为bash成功地将输出捕获到变量中,所以总是为0.
这是一个非常时间敏感的脚本,所以我们试图避免任何较慢的解决方案,如输出到文件并重新读取它.
如果我可以将stdout捕获到一个变量并将stderr捕获到另一个变量,这将解决我的问题,因为我可以检查错误变量是否为空.
谢谢.
我将执行一个进程(lame.exe)将WAV文件编码为MP3.
我想处理进程的STDOUT和STDERR以显示进度信息.
我需要使用线程吗?我无法理解它.
一些简单的示例代码将不胜感激.
谢谢
我正在玩i/o shell重定向.我试过的命令(在bash中):
ls -al *.xyz 2>&1 1> files.lst
Run Code Online (Sandbox Code Playgroud)
和
ls -al *.xyz 1> files.lst 2>&1
Run Code Online (Sandbox Code Playgroud)
*.xyz当前文件夹中没有任何文件.
这些命令给了我不同的结果.第一个命令ls: *.xyz: No such file or directory在屏幕上显示错误消息.但第二个将此错误消息打印到该文件.为什么第一个命令无法将错误的输出写入文件?