问题标签 [stdout]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python 的 subprocess.Popen 返回相同的标准输出,即使它不应该
我对 Python 的 subprocess.Popen 有一个非常奇怪的问题。我正在使用它多次调用外部 exe 并将输出保存在列表中。
每次调用这个外部 exe 时,它都会返回一个不同的字符串。但是,如果我使用 Popen 多次调用它,它总是会返回 SAME string。=:-O
看起来 Popen 总是从标准输出返回相同的值,而无需调用 exe。也许在不实际再次调用 exe 的情况下进行某种缓存。
这是我的代码:
我到底做错了什么?!
shell - 模拟警告作为错误的Shell脚本?
一些编译器允许您将警告设置为错误,这样您就永远不会留下任何编译器警告,因为如果您这样做,代码将无法构建。这是一件好事。
不幸的是,一些编译器没有警告作为错误的标志。
我需要编写一个提供该功能的 shell 脚本或包装器。
大概它解析编译控制台输出并在有任何编译器警告(或错误)时返回失败,否则返回成功。“失败”也意味着(我认为)不应该产生目标代码。
什么是您可以编写的最短、最简单的 UNIX/Linux shell 脚本,它满足上述显式要求,以及以下隐含要求,否则其行为就像编译器一样: - 接受所有标志、选项、参数 - 支持 stdout 和 stderr 的重定向- 按照指示生成目标代码和链接
关键词:优雅,满足所有要求。
额外的功劳:易于合并到 GNU make 文件中。
谢谢你的帮助。
===线索===这个解决不同问题的方法,使用shell函数(?),将文本附加到 bash 中的stderr重定向,可能会出现。想知道如何邀请litb的朋友“非常了解 bash”来解决我的问题?
===回答状态===
感谢查理马丁的简短回答,但不幸的是,这就是我开始的。不久前,我使用它,将其发布以供办公室使用,并在几个小时内向我指出了它最严重的缺点:它将通过编译而没有警告,但只有错误。这真的很糟糕,因为那时我们正在交付编译器肯定不会工作的目标代码。简单的解决方案也不满足列出的其他要求。
感谢Adam Rosenfield的速记,以及Chris Dodd将 pipefail 引入解决方案。Chris 的回答看起来最接近,因为我认为 pipefail 应该确保如果编译实际上因错误而失败,我们将得到应有的失败。克里斯,管道故障是否适用于所有外壳?对上面列出的其他隐含要求有什么想法吗?
.net - 捕获标准输出并仍然在控制台窗口中显示
我正在生成一个在可见控制台窗口中运行的子进程(它是一个运行 MSBuild 的批处理文件),我希望该进程生成的输出显示在可见控制台窗口中,并捕获该输出所以我可以在代码中处理它。我已经阅读了其他几个问题和处理 ProcessStartInfo.RedirectStandardOutput 等的 MSDN 文档,我可以从重定向流中捕获输出并在代码中处理它就好了:
问题是子进程的控制台窗口中没有显示输出;我只是在进程运行时在屏幕上看到一个空白的控制台窗口,它在完成后消失。
我想我可以隐藏实际的子进程窗口,并显示第二个窗口,我只需将输出写入到它被捕获的位置,但这似乎比必要的工作更多。有没有办法让输出显示在控制台窗口中,并在完成后仍然捕获它以进行处理?
filter - 无法将 Google 定义转换为标准输出
我的目标是在终端过滤我的谷歌结果,这样我就只能得到谷歌的定义。
我正在尝试在 Mac 的终端中运行以下命令
Firefox 的类似命令是
您可以使用哪个客户端将 Google 的 html 页面添加到您的标准输出中?
background - 使用损坏的 CTRL+Z 执行后,如何将进程置于后台?
这个问题很特殊,因为某些键(例如 CTRL+Z)停止工作。
我试图通过输入顺序将进程置于后台:
- 寻找 /
- CTRL+Z
- bg
但是,我仍然可以看到标准输出。仅执行第一步的唯一区别是命令 CTRL+Z 不再起作用。当我有未保存的工作并且我的硬盘超过 100GB 时,这是相当讨厌的。所以
如何将进程置于后台?
[细节]
我在 Mac 上使用第四版 Bash。
[尼古拉斯·莱利的关键回复]
问题真的是我不明白运行进程背景的“后果”。我不明白为什么 CTRL+Z 之类的命令对后台进程不起作用。我仍然能够使用以下命令在另一个 shell 中终止该进程:
batch-file - 显示 Windows 命令提示符输出并将其重定向到文件
如何在 Windows 命令提示符下运行命令行应用程序并同时显示输出并重定向到文件?
例如,如果我要运行 command dir > test.txt
,这会将输出重定向到一个名为test.txt
而不显示结果的文件。
我如何编写一个命令来显示输出并将输出重定向到 Windows 命令提示符中的文件,类似于tee
Unix 上的命令?
python - 如何从 python (2.5) 中的 subprocess.Popen 获取“实时”信息
我想通过以下方式使用 subprocess 模块:
- 创建一个可能需要很长时间才能执行的新进程。
- 捕获
stdout
(或stderr
,或可能两者,一起或单独) - 处理来自子进程的数据,可能会在接收到的每一行上触发事件(在 wxPython 中说),或者现在只是将它们打印出来。
我已经使用 Popen 创建了进程,但是如果我使用communicate(),一旦进程终止,数据就会立即出现。
如果我创建一个单独的线程来阻止readline()
(myprocess.stdout
使用stdout = subprocess.PIPE
)我也不会使用此方法获得任何行,直到进程终止。(无论我设置为 bufsize )
有没有办法解决这个问题,并且在多个平台上运行良好?
c - 如何忽略从标准输入读取的 C 中的箭头键?
我正在使用 read() 系统调用从标准输入中读取数据,但是有一件小事困扰着我。我不能使用箭头键...我真正想做的是使用箭头键在键入的文本中来回移动,但我认为这并不容易...所以,我至少想做的,就是忽略它们。
现在,按下任何箭头键都会产生奇怪的输出,我想阻止任何东西被写入标准输出(随后在我的 read() 系统调用中从标准输入读取)。
这很容易实现还是没那么容易?
c++ - 限制 cout 流?
一个困扰我的谜题。在一些简单的测试工具代码中,如果我将太多字符流式传输到标准输出,程序就会失败。奇怪但非常可重复。这可能是 Windows 唯一的问题,但很容易看出:
前面的代码只是从标准输入加载一个字符流并以相反的顺序输出它们。它适用于最多 100K 左右的字符,但对于较大的文件,在 Windows 中会因“错误写入标准输出”消息而死。它总是以相同的角色死去。像“cat bigfile.txt | reverse.exe”这样的 shell 命令就是重现问题所需要的。MSFT 和 Intel 编译器的行为都类似。
我意识到标准输出上可能有一个缓冲区,但是当它被填充时不应该自动刷新吗?