关于c ++:使用exec()执行perl / python / …脚本

executing perl/python/… scripts using exec()

我一直在玩我的C++程序中的Linux执行函数,我试着执行脚本(Perl,Python,PHP,……)。

从bash我可以执行例如:sh-c"perl/home/ignition/test.pl"

但是

1
execl("/bin/sh","sh","-c",""perl /home/ignition/test.pl"", NULL);

不起作用。这是可行的:

1
execl("/bin/sh","sh","-c","/home/ignition/test.pl", NULL);

但这依赖于将Perl解释器指定为脚本第一行的正确路径,这不是非常通用的,例如,它不适用于PHP脚本。我想使用sh-c方法来自动解析解释器的路径…

有人能指出我做错了什么吗?


在第一个例子中,您试图执行一个名为"perl的程序,提供一个文件/home/ignition/test.pl"作为第一个参数。当您直接使用shell时,它会在启动程序之前删除引号。

试试这个:execl("/bin/sh","sh","-c","perl /home/ignition/test.pl", NULL);


在使用exec函数时,不需要在包含空格的参数周围使用引号。尝试:

1
execl("/bin/sh","sh","-c","perl /home/ignition/test.pl", NULL);

或者,您可以将脚本中的shebang行从以下内容更改为:

1
#!/usr/bin/perl -w

1
#!/usr/bin/env perl -w

env程序知道如何搜索PATH以查找perl二进制文件,并且不依赖硬编码位置(您几乎可以确定/usr/bin/env存在)。