我想使用java脚本调用perl script,并传递一个java脚本变量?此脚本已由其他人编写。我只想在一些文本上使用他们的脚本然后在我的网站上输出结果。问题是脚本需要一个文件作为输入。
perl脚本具有以下用法
Cannot call method 'forEach' of undefined
我想在调用此脚本时传入一个文本框,并将打印到控制台的命令返回到我的javascript函数。
latexindent.pl [options] [file][.tex]
答案 0 :(得分:1)
你提到CGI是一个标签,所以我假设你没有使用node.js,在这种情况下你会看到
这样的东西。var exec = require('child_process').exec;
var cmd = 'prince -v builds/pdf/book.html -o builds/pdf/book.pdf';
exec(cmd, function(error, stdout, stderr) {
// command output is in stdout
});
因此,假设您希望在服务器上运行perl作为Web服务器执行的CGI,那么Dinesh指出您有2个选项。
选项1:
编辑文件以充当CGI,并通过配置CGI处理程序等使其可通过Web服务器访问。
基本上你需要: 包括CGI.pm,提取已发布的参数并使用它们代替文件内容。这些方面的东西应该让你开始。
#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use JSON;
my $cgi = CGI::Carp->new();
my $data = from_json( $cgi->param('mode') ); ## prob need to tweak
## now continue with your processing using $data instead of the file content.
开放2: 创建一个perl CGI或配置您的Web服务器以处理请求和执行您现有的脚本。
使用类似的代码,但执行使用system(),exec或``approach。请务必阅读有关捕获输出和注入安全问题可能性的安全问题和这些调用方法之间的差异。
答案 1 :(得分:0)
Dinesh Patra的评论帮助我得出答案: 创建一个包装器方法来创建一个文件,然后用创建的文件执行脚本。无需对perl脚本进行任何更改。 这是我用最通用的方式做的。下面的解释。
Javascript:
function sendValueOne(textToSend) {
$.post("path/to/php/Wraper.php", {text: textToSend},
function (data) {
$('#id').html(data.result);
}, "json");
}
PHP:
$value = $_POST['text']; //Get text from post
$uniqueid = getGUID(); //Create Guid (unique identifier)
//Write file to server.
$file = fopen("$uniqueid.tex", "w") or die("Unable to open file!");
fwrite($file, $value);
fclose($file);
//Execute the script passing the file
$result = shell_exec("perl perl path/to/perl/script.pl $uniqueid.tex");
//Delete the file
unlink("$uniqueid.tex");
//Return result
$response = new STDclass();
$response->result = "$result";
echo json_encode($response);
//Function found online to create guid
function getGUID(){
if (function_exists('com_create_guid') === true){
return trim(com_create_guid(), '{}');
}
return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}
$.post("path/to/php/Wraper.php", {text: textToSend},
function (data) {
$('#id').html(data.result);
}, "json");
$uniqueid = getGUID();
$file = fopen("$uniqueid.tex", "w") or die("Unable to open file!");
fwrite($file, $value);
fclose($file);
$result = shell_exec("perl perl path/to/perl/script.pl $uniqueid.tex");
//Delete the file
unlink("$uniqueid.tex");
//Return result
$response = new STDclass();
$response->result = "$result";
echo json_encode($response);
$.post("path/to/php/Wraper.php", {text: textToSend},
function (data) {
$('#id').html(data.result); //Do something with result.
}, "json");