使用perl的`system`

时间:2010-08-13 14:40:38

标签: perl system execution

我想使用perl的command运行一些命令(例如system())。假设command从shell运行,如下所示:

command --arg1=arg1 --arg2=arg2 -arg3 -arg4

如何使用system()使用这些参数运行command

4 个答案:

答案 0 :(得分:9)

最佳做法:避免使用shell,使用自动错误处理 - IPC::System::Simple

require IPC::System::Simple;
use autodie qw(:all);
system qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);

use IPC::System::Simple qw(runx);
runx [0], qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
#     ↑ list of allowed EXIT_VALs, see documentation

编辑:跟随咆哮。

eugene y的回答包括指向系统文档的链接。在那里,我们可以看到每次都需要包含的代码片段才能正确地进行system。 eugene y的回答只是其中的一部分。

每当我们处于这种情况时,我们就会在模块中捆绑重复的代码。我使用Try::Tiny绘制了与正确的简单异常处理相似的内容,但{em> IPC::System::Simple完成了system 没有看到社区的这种快速采用。似乎需要更频繁地重复。

所以,使用autodie!使用IPC::System::Simple保存自己的单调乏味,请放心使用经过测试的代码。

答案 1 :(得分:5)

my @args = qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
system(@args) == 0 or die "system @args failed: $?";

更多信息位于perldoc

答案 2 :(得分:1)

与Perl中的所有内容一样,有多种方法可以实现:)

最好的方法,将参数作为列表传递:

system("command", "--arg1=arg1","--arg2=arg2","-arg3","-arg4");

虽然有时程序似乎不适合该版本(特别是如果它们希望从shell调用)。如果你将它作为单个字符串执行,Perl将从shell调用该命令。

system("command --arg1=arg1 --arg2=arg2 -arg3 -arg4");

但这种形式比较慢。

答案 3 :(得分:1)

my @args = ( "command", "--arg1=arg1", "--arg2=arg2", "-arg3", "-arg4" );
system(@args);