Perl:Prompt似乎会导致Perl代码退出,而不会给出正确的输出

Perl:Prompt似乎会导致Perl代码退出,而不会给出正确的输出,perl,Perl,2014年12月10日 有人能帮我解决这个问题吗?在远程Windows服务器上运行时,字符“>”会导致perl程序过早退出 实际输出为: 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 Numb

2014年12月10日

有人能帮我解决这个问题吗?在远程Windows服务器上运行时,字符“>”会导致perl程序过早退出

实际输出为:

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 
提前谢谢

2014年12月11日

一个“回复”按钮将是很好的,而不是必须编辑一个原始端口

我不太明白拉马先生的建议。因此,如果使用函数print()和waitfor(),则不应使用promt。在这种情况下,我删除了提示符,但是代码仍然不起作用。您是否可以发布一个工作代码示例,该示例将检索打印输出中的字符“”,而不将其视为DOS提示符?

文档中说,如果您没有使用
print()
waitfor()
进行通信,您只需要使用
prompt
属性(它用于
login()

在您的情况下,将从响应中删除
提示
值。请尝试将
提示
值设置为永远不会出现的值,这样可以解决您的问题。请注意选择的值作为
提示
值将被视为正则表达式

#!/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);
my $telnet = new Net::Telnet( Host=>$ipAddress, Port=>23, Timeout=>20, Errmode=>'die');
$telnet->prompt('/$/');