如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN?

2023-12-23

我正在尝试处理没有参数和管道数据传递到 Perl 脚本的可能性。我假设如果没有参数,则输入将通过 STDIN 进行管道传输。但是,如果用户未提供任何参数并且未将任何内容通过管道传递给脚本,它将尝试获取键盘输入。我的目标是提供错误消息。

很遗憾,select()不可移植到某些非 POSIX 系统。 有没有其他方法可以实现最大的可移植性?


Perl 附带-t文件测试运算符,它告诉您特定的文件句柄是否对 TTY 打开。所以,你应该能够这样做:

if ( -t STDIN and not @ARGV ) {
    # We're talking to a terminal, but have no command line arguments.
    # Complain loudly.
}
else {
    # We're either reading from a file or pipe, or we have arguments in
    # @ARGV to process.
}

快速测试表明,它在使用 Perl 5.10.0 的 Windows 和使用 Perl 5.8.8 的 Linux 上运行良好,因此它应该可以在最常见的 Perl 环境中移植。

正如其他人提到的,select这不是一个可靠的选择,因为有时您可能正在从进程中读取数据,但该进程尚未开始写入。

一切顺利,

Paul

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN? 的相关文章

  • Python Twisted 与 Cmd 模块集成

    我喜欢Python的Twisted http twistedmatrix com and Cmd http docs python org library cmd html 我想一起使用它们 我已经完成了一些工作 但到目前为止我还没有弄清楚
  • getoptions 函数 perl 多值不起作用

    具有以下 getoptions 功能 iifiles 参数是可选的 如果提供的话它可以是一对多 但是当我运行此函数时收到错误消息 选项规范错误 Perl 在Solaris 10 上运行 不确定需要为iiles 提供哪些多值选项 GetOpt
  • 本地“关闭”binmode(STDOUT, ":utf8")

    我的脚本开头有以下块 usr bin perl5 w use strict binmode STDIN utf8 binmode STDOUT utf8 binmode STDERR utf8 在某些子程序中 当存在其他编码 来自远程子程序
  • Perl 拆分和正则表达式

    我有以下字符串 100 California Grown Olives Water Salt And Ferrous Gluconate An Iron Derivative asasd sadasda 我想把它分开 but only if
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • 如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows? [复制]

    这个问题在这里已经有答案了 如果有一些跨平台 C C 代码需要在 Mac OS X iOS Linux Windows 上编译 我如何在预处理器过程中可靠地检测到它们 大多数编译器都使用预定义的宏 您可以找到列表here http sour
  • Perl 正则表达式匹配模式的多个实例并替换

    我有一个看起来像这样的字符串 abc 1 2 3 something here foo 10 6 34 somethingelse here def 1 2 another 我想将此字符串拆分为一个数组 其中包含 abc 1 2 3 som
  • 在 Linux 服务器上创建和编辑 MS-Word 文档?

    希望开发处理文档的服务器端应用程序 源文档大多是MS Word 2003 2007 即MS版本的Docx 希望服务器应用程序能够在linux或windows上运行 想知道在linux下读写MS Word文件最好的工具或库是什么 兼容性是最重
  • 是否有与 pdl2(或 Devel::REPL)中的 perl 调试器“x”等效的东西?

    我在用pdl2 the PDL http p3rl org PDLshell 也作为我的默认 Perl 交互式 shell 它加载所有不错的插件Devel REPL http search cpan org perldoc Devel 3a
  • 修改排序比较器内的字符串

    我有以下代码 在排序比较器中 它在进行比较之前删除前缀字符串 print for sort a s STRING b s STRING foo a cmp foo b a 尽管比较和顺序是正确的 但前缀字符串已从输出中删除 以下保留前缀字符
  • 为什么这个特定 Perl 脚本的线程版本比非线程版本慢 200 倍?

    A 推介会 http migo sixbit org papers Perl Threads by 米哈埃尔 戈伊克曼 http migo sixbit org 2003 年 Perl 会议上的文档包含两个质数查找脚本的示例 One htt
  • 在 Perl 中,如何制作数组的深层复制? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Perl 中制作数据结构深层复制的最佳方法是什么 https stackoverflow com questions 388187 whats the best way to make a dee
  • Perl 中的线程定时循环

    本质上 我希望有一个高优先级线程 它以给定的时间间隔 此处为 0 5 毫秒 运行并中断 一切 执行一个短任务 然后返回 睡眠 状态 使用 Ubuntu 11 04 和 perl v5 10 1 问题是 虽然我得到了某种结果 但我不确定是否有
  • 使用 sed 替换复杂模式

    我想使用 sed 命令替换模式 要删除的图案如下所示 带有一个空格 var 0xaae8 x6A x6F x69 x6E x72 x65 x76 x65 x72 x73 x65 x73 x70 x6C x69 x74 x3E x74 x70
  • 如何在 R 中关闭管道连接之前获取输出?

    在 R 中 我们可以使用以下命令打开管道连接pipe 并写信给它 我观察到以下情况 我不太明白 让我们使用一个python管道例如 z pipe python open w cat x 1 n file z cat print x n fi
  • 我们应该聘请用 Perl 编写 C 的人吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的一位同事最近面试了一些求职者 其中一位说他们有非常好的 Perl 经验 由于我的同事不懂 Perl 他要求我对那位潜在雇员编写的 场外 一些代码进
  • Golang 从管道读取读取大量数据

    我正在尝试读取一个正在被焦油化 流式传输到标准输入的存档 但我正在以某种方式读取far管道中的数据多于 tar 发送的数据 我像这样运行我的命令 tar cf somefolder my go binary 源代码是这样的 package
  • 为什么不鼓励在 Windows 上将 PPM perl 模块与 Strawberry perl 一起使用?

    任何人都可以解释为什么人们会发表此评论吗 我在 stackoverflow 上看到了几个线程 像这个 https stackoverflow com questions 6643939 installing modules using st
  • 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?

    除非我使用备份扩展指定它们 否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码 C gt perl i ape splice F 2 0 q inserted text qq F n file1 txt Can t d
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果

随机推荐

  • leetcode中二叉树的类定义解释

    希望有人能帮助我了解这门课是如何运作的 我目前正在 udemy 中学习 JavaScript 算法 它们解释如何在二叉树中执行所有操作的方式与 leetcode 显示的稍有不同 课程中 树的定义与leetcode相同或非常相似 class
  • Lib Gdx json 序列化异常和缺少无参数构造函数

    当尝试执行这段代码时 public void load String filename FileHandle file Gdx files external filename bim Json json new Json String te
  • 在.net框架中测试

    我创建了一个针对 NET Framework 4 6 1 的单元测试项目 测试显示在测试资源管理器中 并在 Visual Studio 2017 中正常运行 我想设置一个构建过程 所以我想从命令行运行测试 我尝试使用 mstest 但这没有
  • 詹金斯正在重新启动,请稍候 - 等待很长时间

    我更新了一些插件并重新启动了詹金斯 但现在它说 Jenkins 正在重新启动 请稍候 当 Jenkins 准备就绪时 您的浏览器将自动重新加载 花费了太多时间 从最后 40 分钟开始等待 我只有 1 个项目 大约有 20 个版本 我已经重新
  • Tkinter - 使用自动换行计算文本小部件中的行数

    我想知道如何获取启用自动换行的 Tkinter Text 小部件中的行数 在此示例中 文本小部件中有 3 行 from Tkinter import root Tk text Text root width 12 height 5 wrap
  • 我从 .ssh 文件夹中删除了known_hosts 文件,并且无法在 BitBucket 存储库中拉取或推送

    我犯了一个错误 删除了 ssh 文件夹中的 known hosts 文件 现在我无法在 BitBucket 存储库中拉取或推送 我该如何解决 尝试执行 ssh T email protected cdn cgi l email protec
  • 从第二个 ViewController 返回到第一个 ViewController

    我正在构建一个当前有 3 个 ViewController 的应用程序 其中之一是在成功登录后使用的 因此与这个问题无关 当我发现 Storyboard 无法提供所需的精细控制时 我混合使用 Storyboard 并以编程方式构建内容 第一
  • 使用打字稿模板将 create-react-app 更新到 4.0 时出错

    我要更新react scripts到下一个版本 4 0 0 这样我就可以使用本指南使用快速刷新功能here https gist github com iansu 282dbe3d722bd7231fa3224c0f403fa1 但是当重新
  • 金字塔 postgresql 连接

    我对金字塔完全陌生 我正在尝试开发一个同时使用金字塔和 postgresql 的应用程序 但我对如何配置 sripts 目录中的initializedb py 文件 尤其是初始化数据库 完全感到困惑 我正在使用 PostgreSQL 9 1
  • 在android布局中layout_height =“0dip”的效果/含义是什么

    我见过几个使用的例子 android layout height 0px 或 0dip 但我不明白这样做的影响 看起来这会使布局高度为 0 像素 该值是否有所减轻 但还有一些其他因素 例如 重量 或任何父视图的高度 是的 你对重量的看法是正
  • Twig 将内容附加到块

    在树枝模板中 是否可以将内容附加到块中 例如 请考虑下面的模板文件 布局 html twig block content endblock content 内部 html twig block css a color fff body ba
  • 通过Python suds在JIRA中创建问题时设置受让人字段

    使用 JIRA 版本 4 2 使用 Python 2 7 和 suds 0 4 如何创建受让人字段集的问题 下面的代码中将忽略受让人字段 new issue client service createIssue auth project N
  • 使用Webpack将Vue暴露到全局

    我正在使用旧版 Rails 应用程序 该应用程序已部分迁移为使用 Webpacker 和 Vue 我们还有一个通过 CDN 加载的遗留脚本 该脚本也需要使用 Vue 但是 我们不想将 Vue 捆绑到其中 而只使用旧版 Rails 应用程序中
  • GNU Make 支持文件名中的“%”吗?

    在 GNU Make 中 是否可以依赖包含以下内容的文件 在文件名中 我有这样的事情 foo results 10 dat gnuplot config plt 虽然我当然可以选择不同的文件名 但很高兴知道是否 应该始终避免 或者是否有一种
  • Slurm:为什么在 sbatch 中使用 srun?

    在 sbatch 脚本中 您可以直接启动程序或脚本 例如可执行文件myapp 但在许多教程中人们使用srun myapp反而 尽管阅读了有关该主题的一些文档 我不明白其中的区别以及何时使用这些语法 我希望这个问题足够精确 SO的第一个问题
  • 如何从密钥库列出/导出私钥?

    如何列出并从密钥库导出私钥 您可以使用 Java6 和 OpenSSL 从密钥库中提取私钥 这一切都取决于 Java 和 OpenSSL 都支持 PKCS 12 格式的密钥库这一事实 要进行提取 您首先使用keytool转换为标准格式 确保
  • 用于编译 GUI 表单的 Ant 任务(Intellij IDEA)

    如何在 Intellij IDEA 中创建 Ant 任务来编译 GUI 表单 XML 我在项目中使用 Scala 和 Java Java仅用于GUI类 我使用Intellij IDEA UI Designer创建它 请不要打败我 但在设置
  • 原始 SQL 请求中的 Rails 4 字符串插值

    在不进行插值的情况下重写此查询的最佳方法是什么 def case joins type subquery lt lt SQL squish SELECT id FROM cases c2 WHERE c2 title id titles i
  • MySQL基于不同时间级别的热门行

    我有 2 张桌子 photo and like 我正在尝试根据一天内的点赞数来获取热门照片 所以基本上是这样的 今天流行 SELECT p id AS id COUNT li id AS total likes FROM photo p L
  • 如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN?

    我正在尝试处理没有参数和管道数据传递到 Perl 脚本的可能性 我假设如果没有参数 则输入将通过 STDIN 进行管道传输 但是 如果用户未提供任何参数并且未将任何内容通过管道传递给脚本 它将尝试获取键盘输入 我的目标是提供错误消息 很遗憾