原始问题:如何通过system()
命令将字符串中的参数从R脚本传递到Perl脚本,其中一个标志可能有0个或多个参数。
例如:"Email.perl -t " p1@email.com; p2@email.com;" -c " p3@email.com; p4@email.com;" -s "Subject Line" -b "Body text" -f C:/file.txt"
我明白了。 Toolic是在正确的道路上,但我必须在每个名字后面传递;
才能让它工作。以下是任何有兴趣的人的工作代码。
R功能:
SendPerlMail <- function(email.to, email.cc=NA, email.sub=NA, email.body=NA, email.file=NA) {
command <- 'perl ..\\..\\Email.perl -t "'
for(to.p in email.to) {command <- paste0(command, paste0(' ', to.p, ';'))}
command <- paste0(command, '" -c "')
for(cc.p in email.cc) {command <- paste0(command, paste0(' ', cc.p, ';'))}
command <- paste0(command, paste0('" -s ', email.sub))
command <- paste0(command, paste0(' -b ', email.body))
command <- paste0(command, paste0(' -f ', email.file))
return(system(command, intern=T, invisible=F))
}
Perl脚本:
#!/usr/bin/perl -w
use Mail::Outlook;
use Getopt::Std;
my %opts;
getopts('t:c:s:b:f:', \%opts);
my $outlook = new Mail::Outlook();
my $msg = $outlook->create();
if(!$opts{t}) {die} else {$msg->To($opts{t});}
if($opts{c} ne 'NA') {$msg->Cc($opts{c});}
if($opts{s} ne 'NA') {$msg->Subject($opts{s});}
if($opts{b} ne 'NA') {$msg->Body($opts{b});}
if($opts{f} ne 'NA') {$msg->Attach(Type => 'text/plain', Path => "/", Filename => $opts{f});}
$msg->send;
答案 0 :(得分:0)
必须在每个电子邮件地址后传递;
。
command <- 'perl ..\\..\\Email.perl -t "'
for(to.p in email.to) {command <- paste0(command, paste0(' ', to.p, ';'))}