使用perl的“系统”
我想使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
最佳实践:避免 shell,使用自动错误处理 -
IPC::System::Simple< /代码>
。
编辑:接下来是咆哮。
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
.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
, howeverIPC::System::Simple
assystem
done right did not see this quick adoption from the community. It seems it needs to be repeated more often.So, use
autodie
! UseIPC::System::Simple
! Save yourself the tedium, be assured that you use tested code.更多信息请参见 perldoc。
More information is in perldoc.
与 Perl 中的所有内容一样,有不止一种方法可以做到这一点:)
最好的方法是将参数作为列表传递:
尽管有时程序似乎不太适合该版本(特别是如果它们希望从壳)。如果您将命令作为单个字符串执行,Perl 将从 shell 调用该命令。
但这种形式速度较慢。
As with everything in Perl, there's more than one way to do it :)
The best way, Pass the arguments as a list:
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.
But that form is slower.