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

Python子进程:如何三次使用管道?

蒙光华
2023-03-14
问题内容

我想在以下行上使用子流程:

convert ../loxie-orig.png bmp:- | mkbitmap -f 2 -s 2 -t 0.48 | potrace -t 5 --progress -s -o ../DSC00232.svg

我发现感谢子帖子的子流程文档,但是在示例中,我们仅使用了两次管道。

因此,我尝试了三个命令中的两个,它可以正常工作

p1 = subprocess.Popen(['convert', fileIn, 'bmp:-'], stdout=subprocess.PIPE)
# p2 = subprocess.Popen(['mkbitmap', '-f', '2', '-s', '2', '-t', '0.48'], stdout=subprocess.PIPE)
p3 = subprocess.Popen(['potrace', '-t' , '5', '-s' , '-o', fileOut], stdin=p1.stdout,stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p3 exits.
output = p3.communicate()[0]

您能帮我执行第三条命令吗?

非常感谢你。


问题答案:

只需按照相同的示例添加第三个命令:

p1 = subprocess.Popen(['convert', fileIn, 'bmp:-'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['mkbitmap', '-f', '2', '-s', '2', '-t', '0.48'], 
     stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
p3 = subprocess.Popen(['potrace', '-t' , '5', '-s' , '-o', fileOut],        
     stdin=p2.stdout,stdout=subprocess.PIPE)
p2.stdout.close()

output = p3.communicate()[0]


 类似资料:
  • Process 结构体代表了一个正在运行的子进程,并公开了stdin(标准输入),stdout(标准输出) 和 stderr(标准错误) 句柄,通过管道和底层的进程交互。(原文:The Process struct represents a running child process, and exposes the stdin, stdout and stderr handles for int

  • 问题内容: 如何使用模块执行以下shell命令? 输入数据将来自字符串,因此我实际上并不需要echo。我已经走了这么远,还有谁能解释我也可以通过它进行管道传输sort吗? 更新:请注意,尽管下面接受的答案实际上并没有回答所提出的问题,但我相信S.Lott是正确的,最好避免首先解决该问题! 问题答案: 您将对以下内容感到满意。 将部分工作委托给外壳。让它通过管道连接两个进程。 您将更高兴地将重写为P

  • 问题内容: 我正在使用以下命令启动子流程: 但是,当我尝试杀死使用: 要么 该命令一直在后台运行,所以我想知道如何才能真正终止该过程。 请注意,当我使用以下命令运行命令时: 发出时,它确实成功终止。 问题答案: 使用进程组,以便能够向组中的所有进程发送信号。为此,你应该将会话ID附加到派生/子进程的父进程中,在你的情况下,这是一个外壳程序。这将使其成为流程的小组负责人。因此,现在,当信号发送到流程

  • 问题内容: 我正在阅读Python内存管理,希望减少应用程序的内存占用。有人建议,子流程可以大大减轻该问题;但是我在概念上需要做些麻烦。可以请一个简单的例子说明如何解决这个问题。 …变成一个 真正的 子处理函数,该函数不存储额外的“自由列表”? 奖励问题: 这个“自由列表”概念也适用于python c扩展吗? 问题答案: 关于优化建议的重要事项是确保仅在子流程中调用该建议。该和是无关的- 一旦你在

  • 问题内容: 例如从bash: 仅杀死父进程。 问题答案: 当您将 负 PID传递给时,它实际上会通过该(绝对)数字将信号发送到过程 组 。您可以在Python中完成与之等效的操作。

  • 我想从. dat文件恢复MSSQL数据库。 通过在Windows PowerShell上调用以下命令/语句或将其保存在一个文件夹中,我成功地做到了这一点。bat文件并运行文件本身: 但是,由于我需要在不同的数据库中多次重复此指令,因此我希望使用Python在循环中执行此操作。我尝试使用子流程模块复制上述指令。没有成功。 我的Python代码如下所示: 在Windows PowerShell上运行此