- 论坛徽章:
- 0
|
本帖最后由 gx303841541 于 2014-10-21 23:54 编辑
问题:
PC A 上perl脚本通过expert模块ssh到PC B ,调用 echo 输出字符串到文件,但是当字符串较大时总是有一些行丢失或者被截断的问题,莫名其妙,望高手指点迷津:
原字符串:- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
复制代码 通过echo 到文件后变成:- 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 33333
- 44444
- 55555555555555555555
- 6666666666
- 77777777777777777777777777
复制代码 以下为模拟问题的脚本:- #!/usr/bin/perl
- use 5.010;
- use Expect;
- my @exp_result;
- my $handle = exp_open('192.168.2.225', 'password', 'ubuntu');
- my $cmd_buff;
- my $test = '
- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
- 8888888888
- 99999999999999999999999999999999999999999999999
- 0000000000000000000000000
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- ccccccccccccccccccccccccccccccccccccccccccc
- ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
- 8888888888
- 99999999999999999999999999999999999999999999999
- 0000000000000000000000000
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- ccccccccccccccccccccccccccccccccccccccccccc
- ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
- 8888888888
- 99999999999999999999999999999999999999999999999
- 0000000000000000000000000
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- ccccccccccccccccccccccccccccccccccccccccccc
- ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
- 8888888888
- 99999999999999999999999999999999999999999999999
- 0000000000000000000000000
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- ccccccccccccccccccccccccccccccccccccccccccc
- ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
- 8888888888
- 99999999999999999999999999999999999999999999999
- 0000000000000000000000000
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- ccccccccccccccccccccccccccccccccccccccccccc
- ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
- 222222222222
- 333333333333
- 44444
- 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
- 666666666666666666
- 77777777777777777777777777
- 8888888888
- 99999999999999999999999999999999999999999999999
- 0000000000000000000000000
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- ccccccccccccccccccccccccccccccccccccccccccc
- ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- ';
- my $test1 = "123";
- $handle->expect(0);
- $handle->clear_accum();
- $handle->send("ls -l\n");
- @exp_result = $handle->expect(2, '-re', 'tftpboot#');
- $cmd_buff = $handle->exp_before.$handle->exp_match.$handle->exp_after;
- $cmd_buff .= $handle->clear_accum();
- if (!defined($exp_result[0]))
- {
- print("expect /'tmp#'/ TIMEOUT!");
- }
- $handle->expect(0.001);
- $cmd_buff .= $handle->clear_accum();
- print "------------------------\n";
- $handle->expect(0);
- $handle->clear_accum();
- $handle->send("echo -e \"$test\" > test.cfg\n");
- @exp_result = $handle->expect(2, '-re', 'tftpboot#');
- $cmd_buff = $handle->exp_before.$handle->exp_match.$handle->exp_after;
- $cmd_buff .= $handle->clear_accum();
- if (!defined($exp_result[0]))
- {
- print("expect /'tmp#'/ TIMEOUT!");
- }
- $handle->expect(0.001);
- $cmd_buff .= $handle->clear_accum();
- ##########################################################
- sub exp_open(){
-
- my ($host, $password, $expect_pattern) = @_;
- $handle = Expect->new;
- $handle->raw_pty(1);
-
- $handle = Expect->spawn("ssh $host");
- $handle->log_file("exp.log");
- $handle->log_stdout(1);
-
- print("ssh [$host] [$password] [$expect_pattern]\n");
- my $ret = $handle->expect(10,[
- qr/password:/i,
- sub {
- my $self = shift ;
- $self->send("$password\n");
- exp_continue;
- }
- ],
- [
- 'connecting (yes/no)?',
- sub {
- my $self = shift ;
- $self->send("yes\n");
- exp_continue;
- }
- ],
- [
- "$expect_pattern",
- sub {
- my $self = shift ;
- $self->clear_accum();
- $self->expect(0.001);
- $self->clear_accum();
- $self->send("cd /tftpboot\n");
- }
- ]
- );
- if (!defined($ret))
- {
- die("TIMEOUT! [$!]");
- }
- $handle->send("\n");
- my @exp_result = $handle->expect(2, '-re', 'tftpboot#');
- if (!defined($exp_result[0]))
- {
- die("exec CMD FAILED!! [$!]");
- }
-
- $handle->clear_accum();
- $handle->expect(0.1);
- $handle->clear_accum();
- return $handle;
- }
复制代码 |
|