【问题标题】:Redirection of stdout to a file not working将标准输出重定向到文件不起作用
【发布时间】:2012-11-08 02:49:01
【问题描述】:

我有一个使用子进程来获取 HTML 的脚本:

misha@misha-K42Jr:~/git/domain_classifier$ python webkit_retrieve.py error-cut.txt html/error -N 5
http://kurabo.co.jp HostNotFoundError
http://monarch.com HostNotFoundError
http://nssmgmt.com HostNotFoundError
http://sbcglobal.net HostNotFoundError
http://dynamixcorp.com SslHandshakeFailedError
http://groupe-synox.com RemoteHostClosedError
QFont::setPixelSize: Pixel size <= 0 (0)
http://www.cnn.com NoError
http://pacbell.net TimeoutError

如果我运行相同的脚本,但将输出重定向到一个文件,我在输出中什么也得不到:

misha@misha-K42Jr:~/git/domain_classifier$ python webkit_retrieve.py error-cut.txt html/error -N 5 > stdout.txt
QFont::setPixelSize: Pixel size <= 0 (0)
misha@misha-K42Jr:~/git/domain_classifier$ cat stdout.txt
misha@misha-K42Jr:~/git/domain_classifier$

为什么输出是空的?它不应该包含在第一种情况下打印到标准输出的相同内容吗?

问题不在于合并标准输出和标准错误,而是为什么重定向标准输出会产生一个空文件

【问题讨论】:

  • 你在文件中得到了什么?
  • 文件是空的,因此cat stdout.txt 什么也没有打印出来。
  • 设置输出文件句柄和自己做输出的 python 源是什么?
  • 如果两个命令的输出 不同 并且 stdout.txt 确实为空,那么如果重定向 stdout,python 脚本的行为会有所不同

标签: python linux bash io-redirection


【解决方案1】:

您已将标准输出发送到该文件,但您的程序正在报告错误,这些错误会转到标准错误。要设置 stderr 的重定向,请使用 2&gt; 语法。

此链接可能会有所帮助:http://www.tldp.org/LDP/abs/html/io-redirection.html

【讨论】:

  • 如果它回显到stderr,当仅重定向stdout 运行命令时,它是否仍会显示在终端上?
  • 好点。考虑到“像素大小”行的外观,几乎看起来 stderr 实际上正在被重定向
  • stderr 按照 linux 系统的默认行为正确打印到标准输出(像素大小的东西)。我不想重定向stderr,我想重定向stdout。
【解决方案2】:

您的输出将进入标准错误。尝试使用以下命令重定向 stderror 和 stdout:

<command> 2>&1 <file>

【讨论】:

  • 如果输出是标准错误,那么我会在控制台中看到它(就像我在第一种情况下所做的那样)。在第二种情况下,输出被重定向到一个文件,但文件最终为空。
  • 不起作用,文件未创建
【解决方案3】:

使用&amp;&gt; 进行重定向,这应该将stdoutstderr 重定向到指定文件

【讨论】:

  • 我一直在成功使用&gt;,20 年后它停止了(不确定它是否与它是一个不起作用的 python 脚本有关)。现在有了&amp;&gt;,它就可以工作了。这是怎么回事?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多