os.system()和subprocess.call()有什么不同吗?

20 浏览
0 Comments

os.system()和subprocess.call()有什么不同吗?

以下两种方法之间是否有功能上的区别?

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

这类似于这个问题,但该问题更加关注subprocess.Popen()

0
0 Comments

`os.system()`和`subprocess.call()`是Python中用于执行系统命令的两个函数。然而,它们在不同操作系统上的实现方式存在一些差异。

在Windows操作系统上运行Python(CPython)时,`os.system`会在幕后执行`_wsystem`函数;而在非Windows操作系统上,则会使用`system`函数。

而`subprocess.call`函数在Windows操作系统上使用`CreateProcess`,而在基于posix的操作系统上使用`_posixsubprocess.fork_exec`。

上述差异结构上回答了关于这两个函数的主要区别的问题。然而,我建议你遵循`os.system`文档中最重要的建议:

The subprocess module provides more powerful facilities for spawning
new processes and retrieving their results; using that module is
preferable to using this function. See the Replacing Older Functions
with the subprocess Module section in the subprocess documentation for
some helpful recipes.

通过以上建议,我们可以得出结论,使用`subprocess`模块更为强大,更推荐使用,它提供了更多的功能来生成新的进程并获取它们的结果。

感谢回答者提供的这个更好的答案,比起链接中的问题,这个回答更为详细。

0