0

据我所知, execv 超过了当前进程,一旦被调用的可执行文件完成,程序就会终止。我想在同一个脚本中多次调用 execv,但正因为如此,这无法完成。

是否有在当前进程中运行的 execv 替代方案(即打印到相同的标准输出)并且不会终止我的程序?如果是这样,它是什么?

4

2 回答 2

1

是的,使用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)
于 2014-08-18T02:30:15.713 回答
0

stdlib 中的subprocess模块是创建进程的最佳方式。

于 2014-08-18T02:15:29.790 回答