奇怪的Steam Updater Behaivour与管道



这个程序的stdout中有一个奇怪的behaivour。

如果我执行程序: ./steam -command update -game "Counter-Strike Source" -dir .输出下一个:

Checking bootstrapper version ...
Updating Installation
Determining which depot(s) to install/update...
5 depot(s) will be installed/updated
  0:02 Checking local files and building download list for depot 242 'Counter-Strike Source Shared' version 129
  0:02     Connecting content server session for version 129
  0:03     [80.239.194.162:27030] Connecting...
  0:06     [80.239.194.162:27030] Failed.  Failed to connect to 80.239.194.162:27030, errno 115 "Operation now in progress"
  0:06     [81.171.68.195:27030] Connecting...
  0:07     [81.171.68.195:27030] Connection established; handshaking...
  0:08     [81.171.68.195:27030] Sending login message...
  0:08     Fetching version 129 manifest
  ...

出于任何奇怪的原因,如果我使用管道和T恤将其记录到文件中:./steam -command update -game "Counter-Strike Source" -dir . | tee log输出程序的唯一一件事是:

Checking bootstrapper version ...
Updating Installation
Determining which depot(s) to install/update...
5 depot(s) will be installed/updated

,仅此而已。日志文件和屏幕上都有相同的文本。该程序仍开始更新文件。知道为什么会发生这种情况?

注意:丢失的行不是来自stderr

Note2:./Steam不会创建任何孩子或额外的过程

我想该程序正在检查isatty(3),以决定是否显示进度输出。如果是这样,那么如果您确实将其捕获到文件,您可能不会获得非常明智的输出,因为它可能使用了各种控制字符来使输出更加人性化。

通过运行连接到TTY时,您可以尝试捕获该程序的输出:

script -c "./steam -command update ..." logfile

tee具有双重目的 - 它从标准输入中读取,并将输出写入指定的文件和其标准输出。结果,您最终会看到终端上日志文件写入的所有内容,因为没有什么可以"吸收" tee的输出。

如果您只想将所有输出写入文件,请改用输出重定向:

./steam [args...] >> log

包括标准错误:

./steam [args...] 2>&1 >> log

相关内容

  • 没有找到相关文章

最新更新