【问题标题】:Running a perl script that uses a prompt through a C# application通过 C# 应用程序运行使用提示符的 perl 脚本
【发布时间】:2016-09-21 04:49:37
【问题描述】:

试图从我的 c# 应用程序调用 perl 脚本。 perl 脚本有一个提示,要求用户在其中输入一些内容。我似乎无法让它显示。这是我用来调用它的函数。我有另一个函数将 System.Enviroment.SetEnvironmtVariable 设置为具有“C:\Perl\bin\;”的路径以及其他流程所需的其他人'

private void getRevisionAndUpdate()
{
    Process myProcess = new Process();
    myProcess.StartInfo.FileName = "cmd.exe";
    myProcess.StartInfo.WorkingDirectory = @"the directory that has the perl script";
    myProcess.StartInfo.Arguments = @"/c SaidPerlScript.pl";
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.Start();
    myProcess.WaitForExit();
}

正如我之前所说,它似乎可以运行,但它要么只是在记事本中打开脚本,要么什么都不做。还应该注意我已经尝试运行 cmd.exe 和 perl.exe。 cmd 似乎在记事本中打开它,而 perl 没有显示它应该显示的提示。

【问题讨论】:

    标签: c# perl process


    【解决方案1】:

    不太清楚您为什么要尝试运行cmd.exe,但如果您通过perl.exe 运行它就可以工作(我的脚本称为a.pl 并打印hello):

        static void Main(string[] args)
        {
            Process myProcess = new Process();
            myProcess.StartInfo.FileName = "perl.exe";
            myProcess.StartInfo.WorkingDirectory = @".\";
            myProcess.StartInfo.Arguments = @"a.pl";
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.Start();
            myProcess.WaitForExit();
        }
    

    而且它也能正确读取 STDIN。供参考,这是a.pl

    print("Hello\n");
    my $a = <STDIN>;
    print "You entered " . $a . "\n";
    

    【讨论】:

    • 问题是我认为将脚本作为命令传递。我从另一段代码中复制了“/c”。不需要它。
    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多