使用perl的“系统”

发布于 2024-09-14 09:26:24 字数 276 浏览 5 评论 0原文

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

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

How do I use system() to run command with those argument?

I would like to run some command (e.g. command) using perl's system(). Suppose command is run from the shell like this:

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

How do I use system() to run command with these arguments?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

初相遇 2024-09-21 09:26:24

最佳实践:避免 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。尤金·伊的回答仅显示了其中的一部分。

每当我们遇到这种情况时,我们都会将重复的代码捆绑在一个模块中。我将 Try::Tiny 与正确的简单异常处理进行了比较,但是将 IPC::System::Simple 视为 system做得正确并没有看到社区的快速采用。看来需要更频繁地重复。

所以,使用autodie!使用 IPC::System::Simple! 避免您的乏味,请放心,您使用的是经过测试的代码。

Best practices: avoid the shell, use automatic error handling - 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

Edit: a rant follows.

eugene y's answer includes a link to the documentation to system. There we can see a homungous piece of code that needs to be included everytime to do system properly. eugene y's answer shows but a part of it.

Whenever we are in such a situation, we bundle up the repeated code in a module. I draw parallels to proper no-frills exception handling with Try::Tiny, however IPC::System::Simple as system done right did not see this quick adoption from the community. It seems it needs to be repeated more often.

So, use autodie! Use IPC::System::Simple! Save yourself the tedium, be assured that you use tested code.

只是偏爱你 2024-09-21 09:26:24
my @args = qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
system(@args) == 0 or die "system @args failed: $?";

更多信息请参见 perldoc

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

More information is in perldoc.

怪我闹别瞎闹 2024-09-21 09:26:24

与 Perl 中的所有内容一样,有不止一种方法可以做到这一点:)

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

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

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

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

但这种形式速度较慢。

As with everything in Perl, there's more than one way to do it :)

The best way, Pass the arguments as a list:

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

Though sometimes programs don't seem to play nice with that version (especially if they expect to be invoked from a shell). Perl will invoke the command from the shell if you do it as a single string.

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

But that form is slower.

薄荷→糖丶微凉 2024-09-21 09:26:24
my @args = ( "command", "--arg1=arg1", "--arg2=arg2", "-arg3", "-arg4" );
system(@args);
my @args = ( "command", "--arg1=arg1", "--arg2=arg2", "-arg3", "-arg4" );
system(@args);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文