草庐IT

python,迭代 subprocess.Popen() stdout/stderr

有很多类似的帖子,但我没有找到答案。在Gnu/Linux上,使用Python和subprocess模块,我使用以下代码迭代使用子进程启动的命令的stdout/sdterr:classShell:"""runacommandanditerateoverthestdout/stderrlines"""def__init__(self):passdef__call__(self,args,cwd='./'):p=subprocess.Popen(args,cwd=cwd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,)whileTrue:li

Python sys.stderr 刷新频率

sys.stderr多久刷新一次它的缓冲区,这是不同环境之间的标准吗?>>>importsys>>>sys.__stderr__',mode'w'at0x2b4fcb7ac270>我看到它只是一个标准的文件类型,但我不知道buffering的值是什么它应该是。dir()似乎也没有产生任何有用的信息。 最佳答案 更新:自Python3.9以来,sys.stderr默认是行缓冲的。如果python接收到-u命令行选项或设置了$PYTHONUNBUFFERED环境变量,则stdout和stderr流被强制取消缓冲(包括自Python3.7

python - stderr 的 python 默认编码?

我有一个嘈杂的python脚本,我想通过将其stderr输出定向到/dev/null(使用bashBTW)来使其静音。像这样:python-uparse.py1>/tmp/output3.txt2>/dev/null但它很快就过早退出了。唔。我看不到回溯,因为它当然会随stderr一起消失。如果我不将stderr指向某处,它会嘈杂地正常运行。所以让我们尝试将它重定向到某处的文件而不是/dev/null,并查看它输出的内容:python-uparse.py1>/tmp/output3.txt2>/tmp/foo||tail/tmp/fooTraceback(mostrecentcalll

python - 如何将 raw_input 重定向到 stderr 而不是 stdout?

我想将stdout重定向到一个文件。但这会影响raw_input。我需要将raw_input的输出重定向到stderr而不是stdout。我该怎么做? 最佳答案 raw_input的唯一问题是它将提示打印到标准输出。与其试图拦截它,不如自己打印提示,然后在没有提示的情况下调用raw_input,这不会向标准输出打印任何内容?defmy_input(prompt=None):ifprompt:sys.stderr.write(str(prompt))returnraw_input()如果你想用这个替换raw_input:import_

python - 从 pexpect 中提取 stderr

我的问题很简单:我可以expect()使用pexpect查看stderr上的特定输出吗?似乎pexpect.spawn()只能用于期望标准输出上的输出。乌托邦式的例子:导入预期child=pexpect.spawn(...)child.expect("嗨",fd=pexpect.STDERR)或者在散文中,“期待stderr上的字符串‘hi’”。我没有在文档中找到任何关于此类功能的提及,但我确实注意到child实例具有stderr属性...半实现我想要的一个hack是在spawn参数中将stderr重定向到stdout,然后我们可以使用常规expect()。一定有更好的方法吗?干杯

python - 如何以编程方式告诉 Celery 将所有日志消息发送到 stdout 或 stderr?

如何以编程方式打开celery日志记录?从终端,这工作正常:celeryworker-lDEBUG当我调用get_task_logger(__name__).debug('hello')时,我可以在终端中看到消息。(正在显示stdout和stderr)我什至可以importlogging并调用logger.info('hi')并查看它。(两者都有效)但是,在开发任务时,我更喜欢使用测试模块并直接调用任务函数,而不是启动整个worker。但是我看不到日志消息。我知道Celery正在将所有内容重定向到其内部设备,但我也想在stdout上查看日志消息。我如何告诉Celery将日志消息的副本发

Python:为什么从线程调用的 `sys.exit(msg)` 不将 `msg` 打印到 stderr?

今天我遇到了一个事实,即从子线程调用的sys.exit()不会终止主进程。我以前不知道这一点,这没关系,但我需要很长时间才能意识到这一点。如果sys.exit(msg)会将msg打印到stderr,它会节省很多时间。但它没有。事实证明,这并不是我的应用程序中的真正错误;它以一种自愿的方式调用了sys.exit(msg)并带有一个有意义的错误——但我就是看不到这一点。Inthedocsforsys.exit()itisstated:[...]任何其他对象都打印到sys.stderr并导致退出代码1"对于来自子线程的调用,这不正确,其中sys.exit()显然表现为thread.exit(

python:运行超时进程并捕获stdout、stderr和退出状态

这个问题在这里已经有了答案:关闭13年前。PossibleDuplicate:subprocesswithtimeout在Python中执行以下操作的最简单方法是什么:运行外部进程捕获字符串中的标准输出、标准错误和退出状态设置超时。我想要这样的东西:importproctry:status,stdout,stderr=proc.run(["ls","-l"],timeout=10)exceptproc.Timeout:print"failed"

Python Tornado - 禁用日志记录到 stderr

我有一个简约的Tornado应用程序:importtornado.ioloopimporttornado.webclassPingHandler(tornado.web.RequestHandler):defget(self):self.write("pong\n")if__name__=="__main__":application=tornado.web.Application([("/ping",PingHandler),])application.listen(8888)tornado.ioloop.IOLoop.instance().start()Tornado不断向stde

python - 在 Django 数据迁移中打印到 stdout 或 stderr 是否可以?如果是这样,如何?

我一直在寻找这方面的指导方针,但没有成功。在我使用的项目中Djangodatamigrations经常。它们看起来或多或少像文档中的示例。然而,操作有时相当复杂,最好有一些控制台输出总结执行的操作(即删除/创建/重新连接/等的内容以及原因)。所以问题是:将这种登录编码到迁移中是否可以?如果是这样,是使用Python的logging模块还是只使用print更好?在前一种情况下,可能需要额外的配置才能使这些日志可见(在settings.py中?)。在后一种情况下,首选stderr还是stdout?这个问题可以扩展到是否允许来自用户的交互式输入。内置的模式迁移工具很容易提出与数据相关的交互式