0

您好想将一个参数传递给我的 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 脚本的输出文件总是空的。

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

4

2 回答 2

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;
于 2013-03-28T11:18:21.690 回答
0

我终于得到了适用于 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 中的参数

于 2013-03-28T21:12:11.667 回答