2009-10-07 29 views
-1

我想用Perl脚本来执行C程序。什么输入手动给C的可执行文件,这些应该由我的程序给出..如何在Perl中运行外部程序?

让我们来看一个简单的程序,它需要输入两个数字。并打印它的总和。 这些值应该由Perl脚本提供。

请通过一些教程指导我,我可以实现同样的目标。如果你想捕捉从C程序的输出在你的Perl脚本

system "my-c-program 1 2"; 

,然后使用反引号或qx// operator

回答

5

使用system功能

my $output = `my-c-program 1 2`; 

运行my-c-program 1 2和将标准输出捕获到新的$output变量中。

+0

我认为OP想要调用的程序的输出。 – 2009-10-07 10:44:19

+0

你需要引导我通过这个过程..因为我是一个新手在这..或者分享一些很好的教程。 – AGeek 2009-10-07 10:49:27

-1

您可能在反引号引用机制之后执行外部程序并将其stdout作为字符串返回。 例如

$date = `date` 
print $date; 

会在unix中打印“Wed Oct 7 12:50:33 CEST 2009”。然而,出于安全目的,这些论据必须进行脱壳处理,而且在某些情况下这可能会非常棘手 - 在大多数情况下,污染是一种方法。

我建议所有的初学者,直接进入了“系统”命令,直到他们意识到了反引号的安全隐患 - 如果是这种情况你应该采取@戴夫韩丁的建议

对于高级魔法你应该阅读perlipc perldoc

+0

'system'和'qx //'做不同的事情。 “*直接进入'system'命令直到他们意识到反引号的安全含义*”这意味着什么?顺便说一句,'system'是一个函数。 – 2009-10-07 10:56:13

+1

这意味着初学者应该远离反引号,直到他们了解shell逃脱。是的,你对系统是正确的。 – codehead 2009-10-07 11:11:29

5

那么,如果你只是在学习如何在Perl中运行外部程序 - 请为你自己一个忙,忘掉``。

与``的问题是你执行一个带有参数的字符串 - 所以它必须被解析。这可能会导致用户提供参数时出现问题。

如果您100%确定完全控制参数和命令名称,您可以使用``,但对于任何其他情况 - 请考虑使用IPC::Run

它有点复杂,但它不需要任何参数解析使得更好。另外,您可以完全控制stdin,stdout和stderr执行的程序 - 包括将回调附加到它们!

+0

嗨先生..我的回答看起来有点有趣我..但它听起来太多额外,, bcoz我不会清除sm术语..我怎么可以通过perl脚本运行一个简单的C程序..在执行期间,当C程序要求输入时,perl应该提供该输入。随着时间推迟在B/W ... – AGeek 2009-10-09 06:31:05

+0

我还没有理解你的评论??请再次写清楚,如果可能的话...... Anywys thnkx。 – AGeek 2009-10-09 11:51:38