作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个脚本,它需要定期(每 5 分钟)生成一个 Expect 进程来完成一些工作。下面是我拥有的代码,它产生了一个 Expect 进程并做了一些工作。脚本的主要进程一直在做一些其他的工作,例如它可能会等待用户输入,因此我在一个每 5 分钟不断调用它的线程中调用这个函数“spawn_expect”,但问题是预期未按预期工作。
但是,如果我用另一个进程替换线程,也就是说,如果我 fork 并让一个进程负责生成 Expect 并且另一个进程执行脚本的主要工作(例如在提示下等待),那么 Expect 工作正常。
我的问题是是否有可能有一个线程产生 Expect 进程?我是否必须求助于使用流程来完成这项工作?谢谢 !
sub spawn_expect {
my $expect = Expect->spawn($release_config{kinit_exec});
my $position = $expect->expect(10,
[qr/Password.*: /, sub {my $fh = shift; print $fh "password\n";}],
[timeout => sub {print "Timed out";}]);
# if this function is run via a process, $position is defined, if it is run via a thread, it is not defined
...
}
最佳答案
创建 Expect
对象 beforehand (不在线程内)并将其传递给线程
my $exp = Expect->spawn( ... );
$exp->raw_pty(1);
$exp->log_stdout(0);
my ($thr) = threads->create(\&login, $exp);
my @res = $thr->join();
# ...
sub login {
my $exp = shift;
my $position = $exp->expect( ... );
# ...
}
Expect
使用自定义测试脚本并将脚本的输出返回到主线程。让我知道我是否应该发布这些(简短的)程序。
Expect
对象是在一个线程内创建的,它对我来说也失败了。我的猜测是,在这种情况下,它不能像通常那样设置它的 pty。
fork
不过为了这份工作。
关于multithreading - 从 perl 线程生成 Expect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874794/
我是一名优秀的程序员,十分优秀!