【问题标题】:Running dd from python and getting progress从 python 运行 dd 并取得进展
【发布时间】:2019-07-18 07:22:27
【问题描述】:

这是我的代码,但它不起作用。 dd 命令被执行,但没有输出输出。 注意:如果我将 stdout 更改为常规文本文件,则 dd 输出会在 dd 打印出的每个进度行处逐步保存在文件中。

想法? 问候。

import sys
from subprocess import Popen, STDOUT, PIPE

with Popen(["dd", "if=/dev/cdrom", "of=/tmp/prova.iso", "bs=2048", "count=499472", "status=progress"], stderr=STDOUT, stdout=PIPE) as proc:
    print("ok")
    print(proc.stdout.read())

【问题讨论】:

  • 我会给你留下this,它显示了如何在每次换行/回车时打印数据。给出这个问题的答案将非常广泛,并且已经有关于这个特定问题的主题。
  • 感谢@Torxed,我得到了 cmd.py。我认为,通过在 shell 中运行 cmd.py,我可以看到打印出“ls -l”的结果,这似乎是默认启动的命令。但是,当我启动 cmd.py 时,什么也没有发生。怎么了?
  • 谢谢@Steve。我找到了这个链接的解决方案。

标签: python pipe popen dd


【解决方案1】:

我找到了解决办法。

import subprocess
import sys

cmd = ["dd", "if=/dev/cdrom", "of=/tmp/iso.iso", "bs=2048", "count=499472", "status=progress"]

process = subprocess.Popen(cmd, stderr=subprocess.PIPE)

line = ''
while True:
    out = process.stderr.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        s = out.decode("utf-8")
        if s == '\r':
            print(line)
            line = ''
        else:
            line = line + s

谢谢大家的回答。

【讨论】:

    【解决方案2】:

    看看这个: dd with progress in python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2013-04-23
      • 2020-06-16
      • 2015-08-06
      相关资源
      最近更新 更多