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

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 に答える
1

Process.Start(string,string) を介したユーザー入力ではなく、コマンド ライン引数を perl スクリプトに渡しています。

perl スクリプトが受け取った @ARGV を出力してみると、1 が表示されるはずです。

于 2013-09-30T18:49:23.927 に答える