当前位置: 首页 > 面试题库 >

运行包含管道的命令行并将结果显示到STDOUT

沈高峻
2023-03-14
问题内容

一个人如何从Python调用一个包含管道的shell命令并捕获输出?

假设命令是这样的:

cat file.log | tail -1

我想要做的与Perl相当的东西是这样的:

my $string = `cat file.log | tail -1`;

问题答案:

使用subprocess.PIPE,如子流程文档部分“替换外壳管道”中所述:

import subprocess
p1 = subprocess.Popen(["cat", "file.log"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["tail", "-1"], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output,err = p2.communicate()

或者,使用sh模块,管道成为功能的组合:

import sh
output = sh.tail(sh.cat('file.log'), '-1')


 类似资料:
  • 问题内容: 以下工作并打印命令输出: 但是此操作失败(退出状态为1): 有什么建议? 问题答案: 您可以这样做:

  • 问题内容: 我在Ubuntu环境中使用jar执行openSSL命令时遇到问题。我的结论是,发生这种情况是由于文件路径中的空间正在作为命令中的参数(例如,以下命令中的SHA 256)传递。我已经使用了进程和类来执行相同的操作: 首先 : 第二 : 最终命令如下所示,如果在命令提示符下单独执行,则工作正常,但使用Java代码执行时失败: 我也使用以下方法解决了此问题,但是没有按预期工作: 请查看并帮助

  • 问题内容: 我必须 在ant中执行command:所以我尝试了这个任务: 但是我对管道有个异议-“ |” : 所以,这就是问题所在:) 问题答案: 管道(|)仅可用于Shell脚本。您将其作为参数传递给Java进程。 因此,您需要执行一个Shell脚本。您可以通过执行(说)并将上面的内容作为shell语句传递来做到这一点(尽管是 内联的 ,您可以编写一个单独的脚本文件,但这似乎有点麻烦)

  • 问题内容: 在groovy脚本中(用于jenkins管道):如何运行命令而不是命令? 我尝试了以下方法: 在通话中致电“ ” : 将呼叫替换为呼叫: 附加信息: 我的命令比命令更复杂。 问题答案: 您提供的Groovy脚本正在将结果脚本中的第一行格式化为空白行。shebang告诉脚本使用/ bin / bash而不是/ bin / sh运行,它需要位于文件的第一行,否则它将被忽略。 因此,您应该这

  • Computer says no. — Little Britain 一个问题的详细反馈会对解决问题有帮助。当你使用 exec 资源在节点上执行命令时, 并不总能轻易地找出其为何没有正确执行。如果命令返回一个非零的退出状态,Puppet 就会返回类似如下的错误消息: err: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: ch

  • 问题内容: 我创建了一个在命令行上打印结果的程序。(它是服务器,并在命令行上打印日志。) 现在,我想对GUI看到相同的结果。 如何将命令行结果重定向到GUI? 请提出一个技巧,以轻松地将控制台应用程序转换为简单的GUI。 请注意,它应在Linux和Windows上运行。 问题答案: 您可以创建一个脚本包装程序,该程序包装程序将您的命令行程序作为子进程运行,然后将输出添加到诸如文本小部件之类的东西中