Perl:提示似乎导致perl代码退出而不提供正确的输出

时间:2014-12-09 15:14:20

标签: perl

2014年12月10日

有人可以帮助我解决这个问题,其中字符'>'导致perl程序在远程Windows服务器上运行时提前退出?

实际输出是:

K:\ Volume in drive K is DataDisk
 Volume Serial Number is E8BD-C593
 Directory of K:\
04/15/2011  05:25 AM    <DIR

预期输出为:

K:\>dir
 Volume in drive K is DataDisk
 Volume Serial Number is E8BD-C593

 Directory of K:\

12/08/2014  11:18 PM    <DIR>          ftpvol
04/15/2011  05:25 AM    <DIR>          Images
               1 File(s)              0 bytes
              16 Dir(s)  246,180,012,032 bytes free 

这是脚本:

#!/usr/bin/perl
use Net::Telnet ();

my $node = $ARGV[0];
my $ipAddress = $ARGV[1];
my $username = $ARGV[2];
my $password = $ARGV[3];
my $mmlCommand0 = "hostname&prcstate -l";


my $filedate = `date +%Y%m%d`; #date in format YYYYMMDD
chomp($filedate); #deletes newline character at end 


my $numArgs = $#ARGV + 1;

if($numArgs == 4){

    my $telnet = new Net::Telnet( Host=>$ipAddress, Port=>23, Timeout=>20,  Errmode=>'die', Prompt=>'/>/');
    $telnet->open() or die "hai $telnet->errmsg ";
    $telnet->waitfor('/login name:/');
    $telnet->print($username);
    $telnet->waitfor('/password:/');
    $telnet->print($password);
    $telnet->waitfor('/Windows NT Domain:/');
    $telnet->print("");
    $telnet->waitfor('/>/');

## get printouts

    #print $telnet->cmd($mmlCommand0);

    print $telnet->cmd("K:");
    print $telnet->cmd("dir");
}
else{
    print "\n!!! Correct syntax is: command <node> <IP address> \nExample: \n\n";
}

print "\n\n";

exit(0);
如果我删除提示或尝试设置另一个提示,

脚本不会执行。 但是我觉得这个角色的错误是&#39;&#39;&#39;总是被解释为提示。

my $telnet = new Net::Telnet( Host=>$ipAddress, Port=>23, Timeout=>20, Errmode=>'die');
$telnet->prompt('/$/');

提前致谢!

2014年12月11日

A&#34;回复&#34;按钮会很高兴而不必编辑原始端口......

我不太关注Llama先生的建议。因此,如果我使用函数print()和waitfor(),则不应使用promt。在那种情况下,我删除了提示,但代码仍然无法正常工作。您是否善意发布一个可以检索字符的工作代码示例&#39;&lt;&#39;和&#39;&gt;&#39;在打印输出中,不要将其视为DOS提示符?

1 个答案:

答案 0 :(得分:1)

Net::Telnet文档说明如果您 使用promptprint()进行通信,则只需使用waitfor()属性(它意味着与login()一起使用 在您的情况下,正在从响应中删除prompt值。尝试将prompt值设置为永远不会发生的值,这应该可以解决您的问题。请注意选择的值,因为prompt值将被视为正则表达式。