我如何像这个 perl 代码一样将 null 传递给标准输入?
Posted
技术标签:
【中文标题】我如何像这个 perl 代码一样将 null 传递给标准输入?【英文标题】:How do i pass null into stdin like this perl code? 【发布时间】:2010-03-18 16:58:36 【问题描述】:This is my question 显然是 this is the answer。原来这是一个缓冲区问题(我的 ffmpeg 链接的接受答案中的解决方案)而不是标准输入。我发现您可以通过在命令提示符中写入 > NUL 来将标准输出为 null,因此我尝试在参数末尾写入
我如何传入 null 或像 perl 代码那样对 IO 锁做一些事情,这样我才能让我的 ffmpeg 脚本在 15 秒左右后不被锁定?注意:我必须让 std out 和 err 来检查失败。
【问题讨论】:
【参考方案1】:更新:之前的回复是关于如何关闭从 Perl 产生的进程上的标准输入,但问题实际上是关于如何在 .NET 中执行任务。
这个想法是一样的。您想关闭新进程的标准输入流的句柄。在 .NET 中,可以使用
app.StandardInput.Close()
在呼叫app.Start()
之后立即。
(我认为您还想设置 app.StartInfo.RedirectStandardInput = true
,但我不是一个 .NET 程序员,对此我不确定)。
NUL
是 Windows 约定,类似于 Unix 的 /dev/null
。但在 Unix 上,> NUL
将创建一个名为 "NUL"
的文件,而 < NUL
将导致您的系统调用(即system
、反引号等)失败,除非有一个名为 "NUL"
的文件。
也就是说,Perl 中有一些可移植的方法来关闭衍生进程的标准输入。例如:
open $fh, "| $command > outputfile 2> errorfile";
close $fh;
将启动$command
并立即关闭$command
的标准输入句柄,就像您从命令行运行命令并立即点击^D
。
【讨论】:
开放进程调用的更安全、更现代的习惯用法是open $fh, '|-', "$command ..."
这一切都很好,但我在 Windows 上,我需要执行类似 perl 代码的操作,因此 ffmpeg 将 F@#$%ing 完成并且不会锁定。什么部分导致 STDIN 为空是 |- 部分(或 |)?我正在使用.NET,并且我已经在设置属性以重定向标准输出和错误。 fh是什么?在 .NET 中,我指定了 exe 和参数。 |似乎在exe前面,这让我感到困惑。 -edit- +1 为您的非正式回答。
这个答案完全正确! stdin 与它无关,我现在对 nul 和 std 了解更多以上是关于我如何像这个 perl 代码一样将 null 传递给标准输入?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Dapper Query 的动态参数中传递多个条件,就像我们为 IN 运算符传递的一样