Я работаю над сценарием, который должен периодически запускать процесс Expect (каждые 5 минут), чтобы выполнить некоторую работу. Ниже приведен код, который у меня есть, который порождает процесс Expect и выполняет некоторую работу. Основной процесс скрипта все время выполняет какую-то другую работу, например, он может ожидать ввода данных пользователем, из-за этого я вызываю эту функцию spawn_expect в потоке, который продолжает вызывать ее каждые 5 минут, но проблема в том, что 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
...
}
$position
в другом потоке?) Что значит не определено -- в другом потоке? - person zdim   schedule 09.05.2017fork
покончить с этим, но остается вопрос, почемуExpect
не выполняет свою работу в потоке. - person zdim   schedule 09.05.2017