如何使用Perl回答外部程序的提示?

时间:2010-01-04 09:30:39

标签: perl interprocess

我有一个.exe文件。当我运行它时,它会询问CSV和.C文件的路径。 我的问题是我需要通过Perl执行.exe并提供路径 .C文件以及CSV文件路径自动。我怎样才能做到这一点?这是一个gui .exe 通过打开命令,我可以浏览并给出c文件和CSV的路径。我希望它很清楚我想说什么......

link to snapshot

如果你通过这个快照,你可以理解我的.exe格式。我有2个单选按钮,我需要选择单选按钮B,然后按运行按钮。如果有人给我一个想法如何通过perl自动进行,hatsoff给他们,非常感谢。 “ IAM使用WINDOWS XP

4 个答案:

答案 0 :(得分:4)

根据您提供的信息,我认为您可以尝试IPC-Runthe Expect CPAN module。这些允许您从Perl中控制外部控制台程序,并从中传递和读取STDOUT / STDERR / STDIN信息。

答案 1 :(得分:2)

如果您只想执行应用程序,请使用system function。如你所说,你有.exe我假设Windows,所以Perl看起来像:

$exitcode = system("c:\\Path\\App\\bin\\application.exe","C:\\dir\\file.csv");

这是使用推荐的方式调用system,传递一个数组,第一个条目是运行命令,其他条目是每个命令行参数。您可以将它传递给单个空格分隔的字符串,但数组方法更安全。

如果要捕获命令use backticks的输出。如果是,最安全的方法是将文件路径放在引号中:

$output = `"c:\\Path\\App\\bin\\application.exe" "C:\\dir\\file.csv"`;
print $output;

答案 2 :(得分:1)

我猜你正在使用Windows。使用System()命令来运行您的代码。这是一个例子:

system($command, @arguments);

# For example:
system( "sh", "script.sh", "--help" );
system("sh script.sh --help");

答案 3 :(得分:1)

如果可执行文件期望参数(输入)作为命令行参数,则上面建议的方法可以正常工作。但是如果你的程序在运行期间提示输入并希望你通过标准输入输入输入,你可以尝试这样的事情:

假设我有一个名为sum.exe的程序,在运行时会提示我输入两个数字并打印它们的总和。

C:\Documents and Settings> sum.exe
Enter A
1
Enter B
2
1 + 2 = 3

现在通过perl运行此sum.exe,您可以执行以下操作:

system("sum.exe < input");

其中文件输入包含程序在运行期间期望/提示的所有输入。就我而言:

C:\Documents and Settings> type input
1
2

因此,在您的情况下,您可以使输入文件包含CSV文件的路径和.C文件的路径。