【问题标题】:How do I translate Ruby's IO.popen calls into Python's subprocess.Popen calls?如何将 Ruby 的 IO.popen 调用转换为 Python 的 subprocess.Popen 调用?
【发布时间】:2010-03-27 20:55:53
【问题描述】:

我已经阅读了文档,并且在 REPL 中尝试了很多东西,并在 Google 上搜索过,但我终生无法理解 subprocess.Popen 在 Python 中的工作原理。

这是我正在使用的一些 Ruby 代码:

IO.popen("some-process") do |io|
  while(line = io.gets)
    # do whatever with line
  end
end

如何使用 subprocess.Popen 将其翻译成 Python?

【问题讨论】:

标签: python ruby subprocess popen io


【解决方案1】:

可能是 Python 中最简单的 Ruby 代码“近亲”:

>>> import subprocess
>>> io = subprocess.Popen('ls', stdout=subprocess.PIPE).stdout
>>> for line in io: print(line.strip())

【讨论】:

  • 请注意,从Popenstdout 读取会带来一定的死锁风险。如果可以接受阻塞,通常首选使用communicate
  • @Mike,如果子进程首先关闭它的标准输入(就像ls 所做的那样——就像some-process 最好在 Ruby 代码中那样做,因为它从不给出any 输入!)在我所知道的任何操作系统中都不会出现死锁。只有使用他们的标准输入的子进程才会有任何可能的风险——所以你的“一般”完全不适用于这个Q和我的A。
【解决方案2】:
import subprocess

process = subprocess.Popen(['ls',], stdout=subprocess.PIPE)
print process.communicate()[0]

【讨论】:

    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多