在 c# 中将数据传递到孩子的 STDIN
本文关键字:孩子 STDIN 数据 | 更新日期: 2023-09-27 18:33:31
我是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";
}
试试这个:
my ($number)=@ARGV;
而不是:
my $number=<STDIN>;
来自perldoc:"数组@ARGV包含用于脚本的命令行参数。
您正在将命令行参数传递给perl脚本,而不是通过Process.Start(string,string)的用户输入。
尝试打印 perl 脚本收到的@ARGV,您应该能够看到 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");
RedirectStandardInput
需要设置UseShellExecute
,但它可能会阻止 perl 脚本正常启动。 在这种情况下,请设置FileName="<path to perl.exe>"
并Arguments="<path to script.pl>"
。