【问题标题】:Pass parameter to a perl script executed trough qsub将参数传递给通过 qsub 执行的 perl 脚本
【发布时间】:2013-03-28 11:13:47
【问题描述】:

您好想将一个参数传递给我的 perl 脚本,该脚本应该通过 qsub 执行。 所以我跑了:

qsub -l nodes=node01 -v "i=500" Test.pl

在 Test.pl 中,我尝试以多种方式调用 i 参数:

use Getopt::Long;
$result = GetOptions ("i" => \$num);
open(FILE,">/data/home/FILEout.txt");
    print FILE "$num\n";             
    print FILE "$ARGV[0]";     
close(FILE);

不幸的是 perl 脚本的输出文件总是空的。

你有什么建议吗?我哪里错了?请帮忙

【问题讨论】:

  • 这个Test.pl:use Data::Dumper; open($FH,">/data/home/FILEout.txt") or die $!; local $Data::Dumper::Terse=1; local $Data::Dumper::Indent=0; print($FH Dumper(\@ARGV), "\n"); print($FH join(',', keys(%ENV)), "\n");的输出是什么?
  • @ikegami 再次感谢您的帮助。您的 Test.pl 的输出如下:PBS_NODEFILE,PBS_O_SHELL,PBS_O_SYSTEM,SSH_ASKPASS,PBS_O_WORKDIR,PBS_O_LANG,PBS_O_MAIL,PBS_O_PATH,LESSOPEN,PBS_JOBCOOKIE,PWD,LANG,USER,PBS_O_HOST,G_BROKEN_FILENAMES,LOGNAME,PBS_JOBID,SHLVL,INPUTRC,PATH,PBS_ENVIRONMENT,PBS_O_QUEUE,OMP_NUM_THREADS,PBS_QUEUE,HISTSIZE,PBS_O_HOME,PBS_MOMPORT,HOME,MAIL,PBS_O_LOGNAME,TZ,PBS_NODENUM,PBS_TASKNUM,NCPUS,HOSTNAME,_,LS_COLORS,SHELL,PBS_JOBNAME,PBS_JOBDIR,TMPDIR,ENVIRONMENT 使用命令 qsub -l nodes=node01 -v "i=500" Test.pl
  • 马铃薯毫无意义。 qsub 的文档中是否有类似 #!/bin/sh if [ "x" == "x$MYVAR" ] ; then echo "Variable is not set" else echo "Variable says: $MYVAR" fi 的示例?如果是这样,如果您尝试(使用-v 'MYVAR=500')会发生什么?如果您将$MYVAR 更改为$i(使用-v 'i=500')会怎样?

标签: perl pbs qsub torque


【解决方案1】:

根据我能找到的所有文档,-v 设置了一个环境变量,因此您可以使用$ENV{i} 来获取500。 (检查您自己的文档以确认。)


如果您想真正将 arg 传递给您的脚本,您可以尝试使用

qsub ... Test.pl -i=500

但根据我的网络搜索,这可能仅适用于 qsub 的某些版本。其他人会要求你制作一个帮助脚本(比如Test.sh

#!/bin/sh
Test.pl "-i=$i"

连同命令

qsub ... -v 'i=500' Test.sh

如果支持qsub ... Test.pl ...args...并且您可以更改脚本,最简单的解决方案是

qsub ... Test.pl 500

my ($i) = @ARGV;

【讨论】:

  • 感谢您的帮助。我正在使用 PBRProfessional 10.4。它不支持 qsub ... Test.pl -i=500 以及您如何建议 -v 设置环境变量。所以我更改了脚本并添加了use Env; print FILE "$ENV{i}";,但没有任何改变。你知道为什么吗?再次感谢
  • @desmo,不,我只有文档可供参考,我找到的所有文档都显示 -v 设置环境变量。 (请注意,use Env; 在那里没有做任何有用的事情。)我确实为我的答案添加了一个替代解决方案(使用帮助脚本),但它也假设-v 设置环境变量。
【解决方案2】:

我终于得到了适用于 PBRProfessional 10.4 的解决方案。

有两种方法可以解决:

第一个如下

echo "perl /path/to/Test.pl -i 500" | qsub -l nodes=node06

二是二用

qsub -l nodes=node06 -v i=500 Test.pl

并通过$ENV{i}读取Test.pl中的参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2011-05-20
    • 1970-01-01
    • 2015-10-20
    • 2016-05-06
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多