我有一个程序可以将信息写入stdout和stderr,并且我需要grep通过什么来到stderr,而忽略了stdout.
我当然可以分2步完成:
command > /dev/null 2> temp.file
grep 'something' temp.file
但我宁愿能够在没有临时文件的情况下做到这一点.有没有任何智能管道技巧?
在bash中,调用foo将在stdout上显示该命令的任何输出.
调用foo > output会将该命令的任何输出重定向到指定的文件(在本例中为'output').
有没有办法将输出重定向到文件并将其显示在stdout上?
Python的解释器默认启用输出缓冲sys.stdout吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
建议到目前为止:
-u命令行开关sys.stdout在每次写入后刷新的对象PYTHONUNBUFFEREDenv varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)是否有任何其他方式来设置一些全局标志sys/ sys.stdout程序执行过程中?
如何在Windows命令提示符下运行命令行应用程序并同时显示输出并重定向到文件?
例如,如果我要运行该命令dir > test.txt,则会将输出重定向到调用的文件test.txt而不显示结果.
我怎么能写一个命令显示输出和输出重定向到在Windows命令提示符下一个文件,类似于teeUnix上的命令?
有哪些sys.stdout.write()情况比较好print?
(示例:更好的性能;更有意义的代码)
管道Python程序的输出时,Python解释器会对编码感到困惑,并将其设置为None.这意味着这样的程序:
# -*- coding: utf-8 -*-
print u"åäö"
正常运行时会正常工作,但失败时:
UnicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\ xa0'进行编码:序数不在范围内(128)
当在管道序列中使用时.
在配管时使这项工作的最佳方法是什么?我可以告诉它使用shell/filesystem /无论使用什么编码吗?
到目前为止我看到的建议是直接修改你的site.py,或者使用这个hack对defaultencoding进行硬编码:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
是否有更好的方法使管道工作?
我正在使用Python的日志记录模块将一些调试字符串记录到一个非常好的文件中.现在另外,我想使用这个模块也将字符串打印到stdout.我该怎么做呢?为了将我的字符串记录到文件,我使用以下代码:
import logging
import logging.handlers
logger = logging.getLogger("")
logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
    LOGFILE, maxBytes=(1048576*5), backupCount=7
)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
然后调用一个记录器函数
logger.debug("I am written to the file")
谢谢你的帮助!
如何将stdout重定向到Python中的任意文件?
当从ssh会话中启动长时间运行的Python脚本(例如,Web应用程序)并进行后台处理,并且ssh会话关闭时,应用程序将引发IOError并在尝试写入stdout时失败.我需要找到一种方法来将应用程序和模块输出到文件而不是stdout,以防止由于IOError导致的失败.目前,我使用nohup将输出重定向到一个文件,这就完成了工作,但是我想知道是否有办法在不使用nohup的情况下完成它,出于好奇.
我已经尝试了sys.stdout = open('somefile', 'w'),但这似乎并没有阻止一些外部模块仍然输出到终端(或者sys.stdout = ...线路根本没有发射).我知道它应该使用我测试过的简单脚本,但我还没有时间在Web应用程序上进行测试.
我正在运行一个bash脚本,它创建一个日志文件来执行命令
我使用以下内容
Command1 >> log_file
Command2 >> log_file
这仅发送标准输出,而不是终端上显示的标准错误.
我可以记录记录到文件的stderr和stdout吗?
我想在保持屏幕的同时管道程序的标准输出.
通过一个简单的例子(echo这里使用仅用于说明目的):
$ echo 'ee' | foo
ee  < - 我希望看到的输出
我知道tee可以将stdout复制到文件中,但这不是我想要的.
$ echo 'ee' | tee output.txt | foo
我试过
$ echo 'ee' | tee /dev/stdout | foo但是因为tee输出到了/dev/stdout管道,所以它不起作用foo