C# 将数据传递给子对象';s STDIN在c中#

C# 将数据传递给子对象';s STDIN在c中#,c#,C#,我对C#和Perl都是新手,但我已经用其他语言编程好几年了。但无论如何,我一直在尝试编写一个简单的程序,通过其STDIN将值从C#程序传递到Perl脚本。C#程序可以很好地打开Perl脚本,但我似乎无法找到向它传递“1”的方法。最好的方法是什么?我到处寻找解决办法,但运气不好 C#代码: Perl程序 #!/usr/bin/perl use strict; use warnings; print "Enter 1: "; my $number=<STDIN>; if($number=

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

C#代码:

Perl程序

#!/usr/bin/perl
use strict;
use warnings;
print "Enter 1: ";
my $number=<STDIN>;
if($number==1)
{
    print "You entered 1\n\n";
}
#/usr/bin/perl
严格使用;
使用警告;
打印“输入1:”;
我的$number=;
如果($number==1)
{
打印“您输入了1\n\n”;
}
试试这个:

my ($number)=@ARGV;
而不是:

my $number=<STDIN>;
my$number=;

From:“数组@ARGV包含用于脚本的命令行参数。”

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


尝试打印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");

重定向标准输入
需要设置
UseShellExecute
,但这可能会阻止perl脚本正确启动。在这种情况下,设置
FileName=“”
Arguments=“”

非常感谢!这似乎确实奏效了!唯一的问题是,我将使用已经编写的脚本,我不知道是否允许修改它们。但也许我会把所有的脚本复制一份,然后有我自己的小版本。但是谢谢!它是
@ARGV
,而不是
@ARGV
。无论哪种方式,op都明确表示希望通过标准输入而不是参数传递值。@ikegami编辑了我的答案,谢谢。发送击键似乎不是一个好主意,所以只是指出了错误。
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;

p.Start();

p.StandardInput.WriteLine("1");