C#命令行输出

今天我在编写一个监控bat运行状态的程序,这程序本来跟我以前编写的一个监控exe运行状态的程序大同小异,不过却得出不同的结果(bat的运行不会停下来):

exe:

            p.StandardInput.WriteLine(@"cd\");
            p.StandardInput.WriteLine(@"C:");
            p.StandardInput.WriteLine(@"cd C:\Program Files (x86)");
            p.StandardInput.WriteLine(@"dosomethings.exe --arguments");
            p.StandardInput.WriteLine("exit");

这下我不得不修改这段代码强制让bat结束:

bat:

            p.StandardInput.WriteLine(@"cd\");
            p.StandardInput.WriteLine(@"C:");
            p.StandardInput.WriteLine(@"cd C:\Program Files (x86)");
            p.StandardInput.WriteLine(@"dosomethins.bat --arguments & exit");

这段代码也是可以用bat里面获取到exit code的:

            strOutput = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            iExitCode = p.ExitCode;
            p.Close();

我还在网上发现了一段可以改进我的程序的方法(程序可以异步地跑bat脚本和获取command line输出结果):

http://www.cnblogs.com/ymind/archive/2012/03/23/2415038.html

以下是他的代码--同步:

using (Process process = new System.Diagnostics.Process())
{
    process.StartInfo.FileName = "ping";
    process.StartInfo.Arguments = "www.ymind.net";
    // 必须禁用操作系统外壳程序
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.RedirectStandardOutput = true;  

    process.Start();  

    string output = process.StandardOutput.ReadToEnd();  

    if (String.IsNullOrEmpty(output) == false)
        this.textBox1.AppendText(output + "\r\n");  

    process.WaitForExit();
    process.Close();
}

异步:

private void button3_Click(object sender, EventArgs e)
{
    using (Process process = new System.Diagnostics.Process())
    {
        process.StartInfo.FileName = "ping";
        process.StartInfo.Arguments = "www.ymind.net -t";
        // 必须禁用操作系统外壳程序
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardOutput = true;  

        process.Start();  

        // 异步获取命令行内容
        process.BeginOutputReadLine();  

        // 为异步获取订阅事件
        process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
    }
}  

private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    // 这里仅做输出的示例,实际上您可以根据情况取消获取命令行的内容
// 参考:process.CancelOutputRead()  

    if (String.IsNullOrEmpty(e.Data) == false)
        this.AppendText(e.Data + "\r\n");
}  

#region 解决多线程下控件访问的问题  

public delegate void AppendTextCallback(string text);  

public void AppendText(string text)
{
    if (this.textBox1.InvokeRequired)
    {
        AppendTextCallback d = new AppendTextCallback(AppendText);
        this.textBox1.Invoke(d, text);
    }
    else
    {
        this.textBox1.AppendText(text);
    }
}  

#endregion
时间: 2024-12-27 20:35:40

C#命令行输出的相关文章

php cli模式或者内置server命令行输出信息

1 /* 2 * php cli模式或者内置server命令行输出信息 3 * param fixed $data 参数可以是除了对象以外的所有数据类型,比如:字符串,数组,jason等 4 */ 5 public function console($data) { 6 7 // 中文编码处理 8 $wp = json_encode ( $data, JSON_UNESCAPED_UNICODE ); 9 10 $stdout = fopen ( 'php://stdout', 'w' ); 1

保存命令行输出信息到log的方法(ubunut下和arm-linux下有效)

使用命令script 在命令行下输入script xxx.log,在当前目录下生成xxx.log文件,接下来命令行中输出的信息都将会保存到xxx.log文件中,当你想结束保存的时候,命令行下输入exit命令结束保存. 此时xxx.log文件中保存的就是刚才所产生的信息,可以cat查看该文件进行合适. 如果你在arm-linux系统中并不能使用script命令,那么可能是你的文件系统中在制作的时候没有使能该命令的配置.解决方法是重新编译你的文件系统,make menuconfig时,选上该选上.或

Python 命令行输出的颜色设置

\033[30m -- \033[37m 设置前景色 print("\033[35m Hello,world! \033[0m") \033[40m -- \033[47m 设置背景色  print("\033[45m Hello,world! \033[0m") 高亮显示.下划线.反白显示 print("\033[31m Hello,world! \033[0m") print("\033[1;31m Hello,world! \03

JMeter学习-023-JMeter 命令行(非GUI)模式详解(一)

前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行模式进行详细解说. 一.应用场景 1.无需交互界面或受环境限制(linux text model) 2.远程或分布式执行 3.持续集成,通过shell脚本或批处理命令均可执行,生成的测试结果可被报表生成模块直接使用,便于生成报告 二.命令行模式优点 1.节约系统资源:无需启动界面,节约系统资源 2.

惊艳的cygwin——Windows下的Linux命令行环境的配置和使用

http://www.tuicool.com/articles/2MramqI 时间 2014-07-29 09:28:36  点滴之间 聚沙成金 原文  http://www.path8.net/tn/archives/6021 主题 CygwinLinux命令 本文内容遵从 CC版权协议 , 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://oldratlee.com/post/2012-12-22/stunning-cygwin N年前倒腾过一次 

使用mxmlc在命令行编译.as代码

在cmd命令行环境下,敲mxmlc出现 提示Error: could not find JRE和"Error: could not find Java 2 Runtime Envi 解决办法 系统属性>>>高级>>>环境变量>>>系统变量   Path的变量值后面加上c:\Program Files\Adobe\Flash Builder Beta\jre\bin(eclipse的java所在的路径) 例如我的 C:\Python27\;C:

Apache Ant学习笔记(2):Apache Ant命令行

Apache Ant的命令行是Apache Ant构建的基础.虽然我们通常在IDE中集成Apache Ant并使用它进行构建,但是了解Apache Ant的命令行对我们在IDE中使用Apache Ant还是很有好处的,如对IDE中Apache Ant的默认设置进行修改以符合自己的要求.此外,还是有用到命令行的场景,虽然很少. 进入命令行,输入ant -help,显示如下(括弧中的文字是选项的注释): ant [options] [target [target2 [target3] ...]] O

彩色控制台模块: 在Windows命令行(Console)上使用多彩的控制台终端

最近在写一个网络模块, 用Windows自带的命令行输出调试信息, 调试信息有点多, 单色略显单调, 于是花了点时间做了如下小模块. 代码非常少, 使用方法极其简单, 我就不再赘述了, 下面有例子. 时间少, 话少说. 有任何bug, 或有任何需要值得改进的, 记得随时联系我咯~~ 效果图/调色板: 示例代码: 1 #include <iostream> 2 3 #include "color_term.h" 4 5 int main() 6 { 7 color_term:

批处理第三方命令行工具汇总(转)

名称 版本 功能简介 下载地址 BatProject.exe 0.5 批处理编辑器 http://www.bathome.net/thread-7186-1-1.html CWnd.exe N/A 窗口.句柄.进程操作 http://www.bathome.net/thread-5778-1-1.html Sum.exe N/A MD5.CRC.BASE64.SHA1加密字符串 http://www.bathome.net/thread-5954-1-1.html TimeBack.exe 1.