参考:https://blog.csdn.net/weixin_42357472/article/details/131473458
另外subprocess
模块和 multiprocessing
模块都提供了在 Python 中处理多进程的功能,但它们的使用场景和目的略有不同。
subprocess
模块主要用于创建和管理子进程,通过调用外部程序或命令来实现与子进程的交互。它可以执行系统命令、调用其他可执行文件,并提供了获取子进程输出、输入和错误信息的功能。subprocess
模块适用于与外部进程进行通信,如执行系统命令、启动其他工具或调用其他编程语言编写的程序。
multiprocessing
模块则专注于在 Python 中创建和管理多个并行的进程。它提供了创建进程、进程间通信、进程同步等功能,使得在 Python 程序中可以方便地实现并行计算和任务分发。multiprocessing
模块适用于在 Python 程序内部实现并发和并行计算,以提高程序的性能和效率。
虽然 subprocess
和 multiprocessing
都涉及多进程的操作,但它们的使用场景和目的略有不同。需要根据具体的需求来选择合适的模块。如果需要与外部进程进行交互,执行外部命令或调用其他可执行文件,可以使用 subprocess
模块。如果需要在 Python 内部实现并行计算和任务分发,可以使用 multiprocessing
模块。
控制和灵活性:subprocess模块提供了更多的方法和选项来控制和管理子进程。例如,你可以设置标准输入、输出和错误输出的处理方式,甚至可以发送信号给子进程。而os.system的功能相对较少,只能执行命令并返回命令的退出状态。
处理输出:subprocess模块可以更方便地处理命令的输出。例如,你可以使用subprocess.Popen的stdout和stderr参数来捕获命令的输出和错误信息。而os.system则无法直接获取命令的输出,只能通过在命令字符串中使用重定向来处理输出。
阻塞性:os.system函数在执行命令时会阻塞Python程序,直到命令执行完毕。而subprocess模块提供了非阻塞的方式执行命令,例如使用subprocess.Popen的communicate方法。
处理复杂命令:subprocess模块更适合处理复杂的命令,如带有管道和重定向的命令。而os.system在处理这类命令时可能会遇到困难。
编码问题:当命令的参数或返回结果包含非ASCII字符时,subprocess模块通常能更好地处理编码问题。
总的来说,subprocess模块相比os.system提供了更多的功能和更大的灵活性,因此在大多数情况下,推荐使用subprocess模块来执行系统命令。然而,如果你的需求很简单,只是需要执行一个命令并获取其退出状态,那么使用os.system可能会更简单。
模块主要用于创建和管理子进程,通过调用外部程序或命令来实现与子进程的交互。它可以执行系统命令、调用其他可执行文件,并提供了获取子进程输出、输入和错误信息的功能。如果需要与外部进程进行交互,执行外部命令或调用其他可执行文件,可以使用。模块,你可以在 Python 程序中执行系统命令、调用其他可执行文件,甚至与其他编程语言编写的程序进行交互。模块执行外部命令时,要谨慎处理输入参数,确保安全性,并避免潜在的安全风险,尤其是在使用。模块都提供了在 Python 中处理多进程的功能,但它们的使用场景和目的略有不同。
一个允许您以非阻塞方式从龙卷风 Web 应用程序生成子进程的模块。
def print_res( status, stdout, stderr, has_timed_out ) :
if status == 0:
print "OK:"
print stdout
else:
print "ERROR:"
print stderr
t = Subprocess( print_res, timeout=30, args=[ "cat", "/etc/passwd" ] )
t.start()
#start tornado
t.ioloop.start()
python中subprocess模块subprocess.run,subprocess.getoutput,subprocess.Popen、subprocess.call的使用
这段代码可以用来启动一个新的 Python 进程,并执行指定的 Python 文件。具体来说,它使用 subprocess 模块的 Popen 函数创建一个新的进程,然后将 "python" 和指定的文件名作为参数传递给 Popen 函数。
这个新的进程会启动一个新的 Python 解释器,并执行指定的文件。如果指定的文件包含一个可执行的 Python 脚本,那么这个脚本将会被执行。如果文件没有可执行的 Python 代码,那么这个进程将会启动一个空的 Python 解释器。
需要注意的是,这个函数调用将会阻塞当前进程,直到新的进程执行完成。如果您希望在启动新进程的同时继续执行当前进程,可以使用 subprocess 模块的其他函数,例如 subprocess.call 或 subprocess.run。这些函数可以等待新的进程执行完成并返回结果,而不会阻塞当前进程。