3

我是 C# 和 Perl 的新手,但我已经用其他语言编程了几年了。但无论如何,我一直在尝试编写一个简单的程序,通过它的 STDIN 将值从 C# 程序传递到 Perl 脚本。C# 程序可以很好地打开 Perl 脚本,但我似乎无法找到一种将“1”传递给它的方法。最好的方法是什么?我已经广泛搜索了解决方案,但没有运气......

C# 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace OpenPerl
{
    class Program
    {
        static void Main(string[] args)
        {
            string path ="Z:\\folder\\test.pl";
            Process p = new Process();
            Process.Start(path, @"1");
        }
    }
}

Perl 程序

#!/usr/bin/perl
use strict;
use warnings;
print "Enter 1: ";
my $number=<STDIN>;
if($number==1)
{
    print "You entered 1\n\n";
}
4

3 回答 3

1

试试这个:

my ($number)=@ARGV;

代替:

my $number=<STDIN>;

来自perldoc“数组 @ARGV 包含用于脚本的命令行参数。”

于 2013-09-30T18:47:35.783 回答
1

您将命令行参数传递给 perl 脚本,而不是通过 Process.Start(string,string) 的用户输入。

尝试打印 perl 脚本收到的@ARGV,您应该可以看到 1。

于 2013-09-30T18:49:23.927 回答
1

如果您希望 perl 脚本通过 STDIN 接收其输入,则 C# 端将如下所示:

Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;

p.Start();

p.StandardInput.WriteLine("1");

UseShellExecute需要设置RedirectStandardInput,但它可能会阻止 perl 脚本正常启动。在这种情况下,设置FileName="<path to perl.exe>"Arguments="<path to script.pl>"

于 2013-09-30T20:10:05.233 回答