C# Sox返回一些值,但StandardOutput.ReadToEnd()返回空值
输出总是空的。当我在命令提示符下运行该sox命令时,我可以得到如下响应:C# Sox返回一些值,但StandardOutput.ReadToEnd()返回空值,c#,console-application,sox,C#,Console Application,Sox,输出总是空的。当我在命令提示符下运行该sox命令时,我可以得到如下响应: try { string filename = "E:\\sox-14-4-0\\mysamplevoice.wav"; Process p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.Sta
try
{
string filename = "E:\\sox-14-4-0\\mysamplevoice.wav";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "E:\\sox-14-4-0\\sox.exe ";
p.StartInfo.Arguments = filename + " -n stat";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
}
catch(Exception Ex)
{
Console.WriteLine(Ex.Message);
}
在C中运行相同的命令时,我得到相同的结果,但输出值为空 您确定sox.exe写入STDOUT而不是STDERR吗 您可以尝试使用OutputDataReceived事件读取数据
E:\sox-14-4-0>sox mysamplevoice.wav -n stat
Samples read: 26640
Length (seconds): 3.330000
Scaled by: 2147483647.0
Maximum amplitude: 0.515625
Minimum amplitude: -0.734375
Midline amplitude: -0.109375
Mean norm: 0.058691
Mean amplitude: 0.000122
RMS amplitude: 0.101146
Maximum delta: 0.550781
Minimum delta: 0.000000
Mean delta: 0.021387
RMS delta: 0.041831
Rough frequency: 526
Volume adjustment: 1.362
您确定sox.exe写入STDOUT而不是STDERR吗 您可以尝试使用OutputDataReceived事件读取数据
E:\sox-14-4-0>sox mysamplevoice.wav -n stat
Samples read: 26640
Length (seconds): 3.330000
Scaled by: 2147483647.0
Maximum amplitude: 0.515625
Minimum amplitude: -0.734375
Midline amplitude: -0.109375
Mean norm: 0.058691
Mean amplitude: 0.000122
RMS amplitude: 0.101146
Maximum delta: 0.550781
Minimum delta: 0.000000
Mean delta: 0.021387
RMS delta: 0.041831
Rough frequency: 526
Volume adjustment: 1.362
我也遇到了这个问题。为什么SoX写标准错误 如果其他人也遇到这个问题,原始问题的解决方案可能只是增加两行
string filename = "E:\\sox-14-4-0\\mysamplevoice.wav";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "E:\\sox-14-4-0\\sox.exe ";
p.StartInfo.Arguments = filename + " -n stat";
p.OutputDataReceived += process_OutputDataReceived;
p.ErrorDataReceived += process_ErrorDataReceived;
p.Start();
p.BeginErrorReadLine();
p.BeginOutputReadLine();
void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
string s = e.Data;
}
void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
string s = e.Data;
}
我也遇到了这个问题。为什么SoX写标准错误 如果其他人也遇到这个问题,原始问题的解决方案可能只是增加两行
string filename = "E:\\sox-14-4-0\\mysamplevoice.wav";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "E:\\sox-14-4-0\\sox.exe ";
p.StartInfo.Arguments = filename + " -n stat";
p.OutputDataReceived += process_OutputDataReceived;
p.ErrorDataReceived += process_ErrorDataReceived;
p.Start();
p.BeginErrorReadLine();
p.BeginOutputReadLine();
void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
string s = e.Data;
}
void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
string s = e.Data;
}
谢谢,我试过你的代码了。我得到一个异常错误,标准错误没有被重定向。当调试到达p.BeginErrorReadLine时会发生这种情况;添加p.StartInfo.RedirectStandardError=true;工作,但我只得到第一行样本阅读:26640如何阅读所有的行?这是我们画家庭作业线的地方。去做一些独立的研究谢谢,试过你的代码。我得到一个异常错误,标准错误没有被重定向。当调试到达p.BeginErrorReadLine时会发生这种情况;添加p.StartInfo.RedirectStandardError=true;工作,但我只得到第一行样本阅读:26640如何阅读所有的行?这是我们画家庭作业线的地方。去做一些我不知道的独立研究吧,我是新来的,我想有人把它编辑错了。对此表示歉意,并且不会再这样做。具有♦ 在他们名字的末尾是版主,所以你通常不应该回复他们的行为。如果您有问题/不明白为什么要编辑,您可以用包含@TheEditorsNickname的注释ping编辑器。@Mat:谢谢您提供的信息。我不知道,我是新来的,我想有人错误地编辑了它。对此表示歉意,并且不会再这样做。具有♦ 在他们名字的末尾是版主,所以你通常不应该回复他们的行为。如果您有问题/不明白为什么要进行编辑,您可以用包含@TheEdit或昵称的注释ping编辑器。@Mat:谢谢您提供的信息。