【问题标题】:Are os.system() and subprocess.call() any different? [duplicate]os.system() 和 subprocess.call() 有什么不同吗? [复制]
【发布时间】:2018-08-17 12:38:39
【问题描述】:

以下两种方法在功能上有区别吗?

os.system("echo $HOME")
subprocess.call("echo $HOME")

这是与this one 类似的问题,但该问题更侧重于subprocess.Popen()

【问题讨论】:

  • 是的。而且您基本上应该始终使用subprocess。如果您想要更完整的答案,您需要先阅读文档,然后告诉我们您不理解的部分。
  • 旁注:它们都完全没有意义,因为它们基本上等同于print(os.environ["HOME"])
  • 另见docs.python.org/3/library/subprocess.html#replacing-os-system(当然,在这种情况下,“通常不需要通过shell调用程序”不适用……)
  • 如果您要问与其他人类似的问题,请在确切您的问题的哪些方面未在其他地方解决的问题中更加明确/具体( “从问题 X 中,我理解了 A,但这仍然不能回答 B”)。
  • @ShadowRanger 这只是示例代码。旁注:我猜使用subprocess 按照同样的逻辑是没有意义的,因为你可以在shell 上输入你需要的任何东西。

标签: python python-2.7


【解决方案1】:

如果您在 Windows 上运行 python (cpython),<built-in function system>os.system 将在窗帘下执行 _wsystem,而如果您使用非 Windows 操作系统,它将使用 system

虽然 subprocess.call 将在 Windows 上使用 CreateProcess 而在基于 posix 的操作系统中使用 _posixsubprocess.fork_exec

以上几点应该回答您关于主要差异(结构上)的问题...也就是说,我建议您遵循os.system 文档中最重要的建议,即:

子进程模块为生成提供了更强大的工具 新流程并检索其结果;使用该模块是 最好使用此功能。请参阅替换旧函数 使用子流程文档中的子流程模块部分 一些有用的食谱。

【讨论】:

  • 谢谢@BPL - 这比链接问题中的答案要好得多。
猜你喜欢
  • 2019-03-23
  • 2011-09-07
  • 2013-08-11
  • 2013-01-17
  • 2013-09-15
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多