据我所知, execv 超过了当前进程,一旦被调用的可执行文件完成,程序就会终止。我想在同一个脚本中多次调用 execv,但正因为如此,这无法完成。
是否有在当前进程中运行的 execv 替代方案(即打印到相同的标准输出)并且不会终止我的程序?如果是这样,它是什么?
是的,使用subprocess
.
os.execv*
不适合您的任务,来自文档:
这些函数都执行一个新程序,替换当前进程;他们不回来。在 Unix 上,新的可执行文件被加载到当前进程中,并且将具有与调用者相同的进程 ID。
因此,当您希望外部 exe 打印到相同的输出时,您可以这样做:
import subprocess
output = subprocess.check_output(['your_exe', 'arg1'])
默认情况下,check_output()
只返回写入标准输出的输出。如果您希望同时收集标准输出和错误,请使用该stderr
参数。
output = subprocess.check_output(['your_exe', 'arg1'], stderr=subprocess.STDOUT)
stdlib 中的subprocess模块是创建进程的最佳方式。