首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

需要在perl expect中并行运行命令

在Perl Expect中并行运行命令可以通过使用多线程来实现。Perl提供了Thread模块,可以方便地创建和管理多个线程。

下面是一个示例代码,演示如何在Perl Expect中并行运行命令:

代码语言:txt
复制
use strict;
use warnings;
use Expect;
use threads;

# 定义要执行的命令列表
my @commands = (
    "command1",
    "command2",
    "command3"
);

# 创建一个数组来保存每个线程的返回结果
my @results;

# 创建线程并执行命令
foreach my $command (@commands) {
    push @results, threads->create(sub {
        my $exp = Expect->new;
        $exp->spawn($command);
        my $output = $exp->expect(undef);
        $exp->soft_close();
        return $output;
    });
}

# 等待所有线程执行完毕
foreach my $thread (@results) {
    my $output = $thread->join();
    # 处理线程返回的结果
    print "Command output: $output\n";
}

在上面的代码中,首先定义了要执行的命令列表@commands,然后创建了一个数组@results来保存每个线程的返回结果。

接下来,使用foreach循环遍历命令列表,对于每个命令,使用threads->create创建一个线程,并将线程对象添加到@results数组中。在线程的代码块中,使用Expect模块创建一个Expect对象,然后使用spawn方法执行命令,expect方法等待命令执行完毕并获取输出,最后使用soft_close方法关闭Expect对象。

在所有线程创建完毕后,使用foreach循环遍历@results数组,使用join方法等待每个线程执行完毕,并获取线程返回的结果。你可以根据需要对结果进行处理,比如打印输出。

这样就实现了在Perl Expect中并行运行命令的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Linux下远程工作防掉线的一个办法

    使用expect命令。值得注意的是expect命令不属于bash,如果远程电脑里没有expect命令,需要先安装(sudo apt install expect)。...passwd:” send “[密码]\n” #这两行表示屏幕出现“BRASpasswd:”后输入密码并按回车键 expect eof 运行此脚本,即发现等待4s后,网络自动登录。...此处用到的bras是南大的脚本,如果是别的单位,换成别的单位的脚本,并对应调整提示输入用户名和密码的交互文本。或者直接使用curl命令(南大的bras核心其实就是一个curl)。...可编辑/etc/crontab文件来达到此目的(root权限)。...第六列写命令的执行者,第七列写命令。所以这一行的完整解读为:不论星期几,每月每天每小时的第0分钟由[用户]执行autobras命令。这样,远程电脑就可以不断重新登入网络,解决一些断网问题。

    1.1K10

    Go 笔记之如何测试你的 Go 代码

    函数中有一个输入参数 t, 类型是 *testing.T,它非常重要,单元测试通过它反馈测试结果,具体后面再介绍。...args ...interface{}) // 检测是否已经发生过错误 method (*T) Failed() bool // 相当于 Error + FailNow,表示这是非常严重的错误,打印信息结束立刻退出...method (*T) Helper() // 标记测试函数可并行执行,这个并行执行仅仅指的是与其他测试函数并行,相同测试不会并行。...还有就是,Division 返回的 error 也要检查,因为这里期待的正常运行结果,只要有错即可认定测试失败。...灵活控制运行哪些测试 假设,我们把前面演示用到的那些测试函数全部放在 math_test.go 。此时,使用默认 go test 测试会遇到一个问题,那就是每次都将包的测试函数都执行一遍。

    58220

    前端单元测试之Jest

    jest,他们都有各自擅长的领域和特点,而我们采用的jest框架具有如下的一些特点: 适应性:Jest是模块化、可扩展和可配置的; 沙箱和快速:Jest虚拟化了JavaScript的环境,能模拟浏览器,并且并行执行...}) }) 然后,在控制台执行yarn jest命令,即可运行单元测试,执行完成后会给出相应的结果。...expect(2 + 2).toBe(4) }) mock mock测试就是在测试过程,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便继续进行测试的测试方法。...当有异步方式运行的代码的时候,Jest需要知道当前它测试的代码是否已经完成,然后它才可以转移动另一个测试,也就是说,测试的用例一定要在测试对象结束之后才能够运行。...Snapshot 快照测试第一次运行的时候会将被测试ui组件在不同情况下的渲染结果保存一份快照文件,后面每次再运行快照测试时,都会和第一次的比较,除非执行“yarn test – -u”命令删除快照文件

    2.7K20

    RBash - 受限的Bash绕过

    的os库执行 /bin/bash 第三个是使用系统命令或者php之类的,反弹一个系统shell到你的攻击机上 第四个是利用系统的二进制文件来进行绕过,这里给出的文件有 more less man 第五个是...,利用expect来绕过 第六个是,通过ssh来绕过rbash的限制 编辑器绕过rbash vi编辑器 在命令,输入 vi,在末行模式,输入 :setshell=/bin/bash ?...这里就直接将shell设置为/bin/bash 接着在执行命令 shell就好了 ? 然后就有一个无限制的shell了 ? ed编辑器 ? 使用编程语言绕过rbash python ? perl ?...反弹shell来绕过rbash python反弹 首先在攻击机 nc-lvp开启监听端口,然后靶机输入 python -c 'import socket,subprocess,os;s=socket.socket...man 和上面一样 Expect 绕过rbash expect是免费的编程工具,用来实现自动的交互式任务,在实际环境脚本或者命令都需要从终端输入来继续运行,而expect就可以根据程序的提示来模拟输入个程序

    5.2K30

    写了个监控 ElasticSearch 进程异常的脚本!

    作者:JackTian 来源:公众号「杰哥的IT之旅」 ID:Jake_Internet 转载请联系授权 服务器配置免密钥环境准备: 配置免密钥前,需要在服务器的 hosts 文件配置目标主机名称与...\@Test^&*' 配置文件,需注意: AllHosts:可配置当前主机通往目标主机的主机名,可以免秘钥自身,数量不限。...多台目标主机以英文逗号隔开 Passwd:主机所对应的密码,顺序需要与主机顺序对应 如果原密码为:test23!.../mianmiyao.sh 脚本执行完毕后,可以先手动执行如下命令,如无需输入密码跳转到对应的目标服务器时,则表示成功。...vim cpufreedisk_config # 所有 ES 集群的主机名,用英文逗号分隔,需要在免密钥机器上执行 EsHosts=hostname1,hostname2 # ES 端口 EsPort

    45131

    Linux之expect工具免交互式shell脚本执行

    Linux之expect工具是一个根据脚本与其他交互式程序进行交互。通过在脚本设定期望值和响应值进行交互操作。主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。...以SSH KEY 生成以及发送到远程服务器为例简单介绍下expect工具 expect 启用选项: -c执行脚本前先执行的命令,可多次使用-ddebug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用.../usr/bin/expect ---v显示expect版本信息 expect 命令参数: spawn交互程序开始,执行后面的命令或程序。...需要进入到expect环境才可以执行,不能直接在shell环境下直接执行set timeout n设置超时时间,表示该脚本代码在n秒钟内完成,如果超过,则退出。..., 如果匹配成功, 就执行send的指令交互;否则等待timeout秒后自动退出expect语句send如果匹配到expect接受到的信息,就将send的指令交互传递,执行交互动作。

    1.1K10

    Linux 集群免密配置脚本

    /usr/bin/bash # 安装expect,minimal没有此rpm包,联网或有本地yum源 yum install expect -y expect << EOF set timeout ..."\n";exp_continue}         "Enter same passphrase" {send "\n";exp_continue} } EOF #  获取/etc/hosts文件除.../bin/bash # passwdless.sh # echo # -n 不要在最后自动换行 # -e 处理特殊字符 # expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信...# expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。 # expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。...(源码安装要注意) yum install expect -y #安装expect echo "按enter键3次即可" # 生成秘钥(按enter键3次即可生成) ssh-keygen -t

    12510

    数据库PostrageSQL-在Windows上从源代码安装

    psql的原生构建不支持命令行编辑。Cygwin构建能支持命令行编辑,因此如果需要在Windows上交互式地使用psql可以用到它。 17.1....注意在版本8.0a,Windows SDK不再包括一个完整的命令行构建环境。 ActiveState Perl ActiveState Perl被用来运行构建生成脚本。...构建 要在发行配置构建PostgreSQL的所有部分(默认),运行命令: build 要在调试配置构建PostgreSQL的所有部分,运行命令: build DEBUG 要构建单独一个对象,例如psql...在这种情况下,你需要在命令提示符下运行perl mkvcbuild.pl 然后在Visual Studio打开生成的pgsql.sln(在源代码树的根目录)。 17.1.4....运行回归测试 要运行回归测试,确保你已经完成了所有所需部分的构建。另外,确保载入整个系统所需的DLL(例如Perl和Python过程语言所需的DLL)都在系统路径

    4.9K50

    shell expect权威指南和实战

    expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。...(二)expect 安装 (Tcl的库) 主页: http://expect.nist.gov/ 1.下载源码包 wget http://sourceforge.net/projects/expect...(3)第二个参数使用expect的spawn命令来启动脚本和命令的会话,这里启动的是chsh命令,实际上命令是以衍生子进程的方式来运行的。 (4)随后的expect和send命令用来实现交互过程。...#脚本的第一部分首先是得到运行参数并将其保存到内部变量 set prompt [lindex $argv 0] set def [lindex $argv 1] set response...#(4)可以看到这里使用了if命令来实现逻辑判断功能。该命令后面直接跟判断条件,并且执行在判断条件后的{}内的命令。if条件为false时则运行else后的程序块。

    1.9K21

    分享7个专业级的JavaScript测试库,提高你的工作效率

    ; } module.exports = myFunction; 当你想运行测试时,可以在终端运行以下命令: npx jasmine myFunction.spec.js 如果myFunction函数的行为符合我们的预期...首先,你需要在你的项目中安装Detox和它的命令行工具。...在Node.js环境,你可以使用npm(Node包管理器)来安装: npm install detox --save-dev npm install -g detox-cli 然后,你需要在你的项目中配置...在这个文件,你可以定义Stryker应该如何运行你的测试和创建变异。...它的设计原则是让你能够在单元测试轻松地模拟或伪造(fake)依赖,从而让你能够更好地隔离和控制你的测试环境。 首先,你需要在你的项目中安装TestDouble。

    27920

    MongoDB自动备份全过程实录

    所以笔者选择不带 -p 参数执行命令,即: mongodump -h {mongodb主机名}:{端口} -u {账号} -d {数据库名称} -o {存储路径} 然后,命令提示符会提示输入密码。...自动备份 正常来说,自动备份是比较简单的——只需将手动备份的命令做成Shell脚本,并设置定时任务即可。然而,笔者的场景,命令是需要交互式输入密码的啊! 怎么才能自动输入密码呢?.../bin/expect # spawn是expect的语句,执行命令添加该字眼 set DATE [exec date "+%Y-%m-%d"] set DIR /xxxxx/dbbak-$DATE...最终备份出来的文件会存放在 /xxxxx/dbbak-备份日期 目录。 自动备份 笔者利用Linux定时任务实现自动执行。 crontab -e 在新窗口中添加如下内容: 0 0 1 * * ?.../bin/expect # spawn是expect的语句,执行命令添加该字眼 set DATE [exec date "+%Y-%m-%d"] set DIR /xxxxx/dbbak-$DATE

    51860

    MongoDB自动备份全过程实录

    所以笔者选择不带 -p 参数执行命令,即: mongodump -h {mongodb主机名}:{端口} -u {账号} -d {数据库名称} -o {存储路径} 然后,命令提示符会提示输入密码。...自动备份 正常来说,自动备份是比较简单的——只需将手动备份的命令做成Shell脚本,并设置定时任务即可。然而,笔者的场景,命令是需要交互式输入密码的啊! 怎么才能自动输入密码呢?.../bin/expect # spawn是expect的语句,执行命令添加该字眼 set DATE [exec date "+%Y-%m-%d"] set DIR /xxxxx/dbbak-$DATE...最终备份出来的文件会存放在 /xxxxx/dbbak-备份日期 目录。 自动备份 笔者利用Linux定时任务实现自动执行。 crontab -e 在新窗口中添加如下内容: 0 0 1 * * ?.../bin/expect # spawn是expect的语句,执行命令添加该字眼 set DATE [exec date "+%Y-%m-%d"] set DIR /xxxxx/dbbak-$DATE

    73130

    GNU Parallel的具体使用

    GNU Parallel是一个shell工具,为了在一台或多台计算机上并行的执行计算任务,一个计算任务可以是一条shell命令或者一个以每一行做为输入的脚本程序。...通常的输入是文件列表、主机列表、用户列表、URL列表或者表格列表;一个计算任务也可以是一个从管道读取的一条命令。GNU Parallel会把输入分块,然后通过管道并行的执行。...对于每一行输入,GNU Parallel会把这一行做为参数来运行指定的命令。如果没有给出命令,那么这一行会被当做命令执行。多行输入会并行运行。...旨在介绍GNU Parallel的一个选项,而非讲解真实世界中使用的例子。花一个小时的时间学习本教程,你会由此爱上上命令行。...perl -e 'print "@ARGV\n"' A 输出: A 使用GNU Parallel运行这条命令的时候,perl命令需要用引号包起来: parallel perl -e 'print

    3.3K10

    PG备份恢复工具-pg_dumpbinary

    pg_dumpbinary从pre-data部分收集模式和表的列表,并通过psql命令执行SQL COPY命令以从所有表以二进制格式转储所有数据。...pg_restorebinary 用于恢复使用pg_dumpbinary命令以二进制格式转储的PG数据库的工具。程序读取作为备份参数给出的目录,然后再-d选项恢复数据库的pre-data部分。...所有数据文件都再运行解压缩并使用COPY SQL命令发送的psql命令,如: COPY my_table FROM stdin WITH (FORMAT binary); 然后将post-data部分导入新数据库...通过 pg_dumpbinary 在导出期间使用并行可以提高转储速度。...该行为类似于目录格式 pg_dump 的 -j 选项。 在调用 pg_restorebinary 期间使用并行可以提高类似的恢复速度。将选项 -j 设置为要使用的同时进程数。

    1.2K50
    领券