os.system()和subprocess.call()有什么不同吗?
os.system()和subprocess.call()有什么不同吗?
以下两种方法之间是否有功能上的区别?
os.system("echo $HOME") subprocess.call("echo $HOME")
这类似于这个问题,但该问题更加关注subprocess.Popen()
。
`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`模块更为强大,更推荐使用,它提供了更多的功能来生成新的进程并获取它们的结果。
感谢回答者提供的这个更好的答案,比起链接中的问题,这个回答更为详细。