据我所知,execv取代了当前进程,一旦被调用的可执行文件完成,程序就会终止。我想在同一个脚本中多次调用execv,但由于这个原因,无法完成。
是否有替代execv在当前进程中运行(即打印到相同的标准输出)并且不能终止我的程序?如果是这样,它是什么?
答案 0 :(得分:1)
是的,请使用subprocess
来自doc:
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)
答案 1 :(得分:0)
stdlib中的subprocess模块是创建进程的最佳方式。