首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从platform.popen移植到subprocess.Popen?

从platform.popen移植到subprocess.Popen?
EN

Stack Overflow用户
提问于 2011-08-11 20:28:38
回答 1查看 218关注 0票数 1

我有一堆使用platform包中过时的popen的代码。因为它已被弃用,所以我将把它移到subprocess包中。

popen("some_command")等效的语句是什么?popen被弃用有什么原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-11 22:12:30

据我所知,

  • platform.popen还没有被弃用。然而,这是一个低级函数,出于灵活性和可移植性的原因,您不应该使用它。
  • 在Python3中弃用了许多其他启动进程的功能,并删除了一些功能。在Python3的历史上,已经做了很多尝试来做好这件事,subprocess.Popen和它的便利函数到目前为止是最好的。
  • 如果你打算移植你的代码来使用subprocess模块,不要寻找与你一直在做的事情完全相同的东西,否则你会错过它是更好的的方式。阅读并理解subprocess文档,了解它用来比旧的替代方案更好地解决进程启动问题的思想。

与旧版alternatives?相比,subprocess.Popen的优势何在

代码语言:javascript
复制
- **It is secure.** Instead of `something('shell command here')`, we do `Popen(['shell', 'command', 'here'])`. This doesn't launch an unnecessary shell process, which makes it less errorprone and dangerous. 

考虑一下,如果我要求用户输入他们的名字。我可能会用旧的东西写something('foo %s" % name)。它应该可以工作--如果用户给您的名字是"Mike",那么它就变成了像foo Mike这样的命令。但是如果用户的名字是"Mike Graham“呢?然后我想要foo 'Mike Graham'。所以现在我总是放在撇号中,但是现在如果用户名是"Mike O'Reilley"呢?更糟糕的是,如果他的名字是"Mike; rm -rf /"呢?这里的解决方案不是试图自己避开这些(这很难做到,更不用说跨平台了),而是直接传递参数,而不是麻烦外壳--Popen(['foo',name]). - **It is flexible.** You can control the input and output fully. - **It is nonblocking.**Popen`可以与您的进程并发运行。

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

https://stackoverflow.com/questions/7025833

复制
相关文章

相似问题

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