首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3与进程的Popen (半)交互式来回通信,Popen.communicate() vs Popen.stdin/Popen.stdout

Python3与进程的Popen (半)交互式来回通信,Popen.communicate() vs Popen.stdin/Popen.stdout
EN

Stack Overflow用户
提问于 2018-11-22 02:12:34
回答 1查看 348关注 0票数 1

我看到的所有使用Python3的subprocess.Popen与进程交互的示例都只使用Popen.communicate("input_text")一次,然后调用Popen.communicate()获取标准输出并结束程序。我有一些需要通过stdin进行人工干预的程序需要编写脚本,所以我想让它们自动化,因为提示是可预测的。

例如,内部许可应用程序要求我们通过提示(而不是从命令行)传递与客户的唯一ID (4位整数)、用户数等相关的应用程序信息,然后必须执行30次(随机数),每次传递一个由另一个整数标识的不同产品。

如果我能学会如何使用Popen进行持续的来回操作,那么编写脚本就很容易了。我应该使用Popen.communicate(),还是应该使用Popen.stdoutPopen.stdin(),两者之间有什么区别?

EN

回答 1

Stack Overflow用户

发布于 2018-12-19 04:22:38

Popen.communicate将一直阻塞,直到子进程完成或失败,然后才会从stdoutstderr返回信息。所以这不是你需要的。

stdinstdoutstderr本质上是属于进程的特殊文件,您可以对其进行读写,就像任何其他文件一样,但如果您将信息通过管道传送到这些文件中,它们可以提供进程之间的接口。

我最近不得不实现一些类似于您所描述的东西,我能够通过“客户端”进程的标准输出检索信息的唯一方法是使用pty模块。我将链接两个对我有帮助的答案,但是请注意,这些解决方案仅适用于Posix,使用shell=True存在安全风险。https://stackoverflow.com/a/5413588/533362 & https://stackoverflow.com/a/13605804/3565382.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53418210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档