创建程序的不同运行并使用其输出

Create different runs of a program and use its output

假设我有 2 个模块:caller_module.pyprogram_module.py。我需要通过 caller_module.py 创建许多 program_module.py 的 运行(这样我在每个 运行 上得到不同的 PYTHONHASHSEED)。

然后我需要使用 program_module.py 在每个 运行 中创建的输出并对其进行一些比较。

问题:
如何动态创建 program_module.py 的不同 运行 以及如何获取其输出? (比较输出很容易做到)

我不完全清楚你想做什么,你需要什么样的参数等等。但作为第一个近似值,看看 subprocess.check_output。我猜你想要这样的东西:

import subprocess
import sys

output = subprocess.check_output([sys.executable, 'program_module.py'])

这实际上是使用当前 Python 可执行文件 运行 当前目录中名为 program_module.py 的模块的最低代码。它应该大致类似于从命令行或控制台执行python program_module.py

您可以根据需要多次将 check_output 调用循环到 运行。

请注意,这假定 sys.executable 在您的配置中是一个合理的值...


默认情况下,check_output() 将 return 调用程序写入 stdout 的任何内容。最简单的方法是通过内置的 print() 函数。你print()的内容被check_output()编辑成一个字符串return,所以我在上面的例子中设置为output的变量就是你要看的。

您可以使用 subprocess module. It has dedicated function named check_output 创建进程,这样您就可以获取模块的标准输出。 env 关键字允许您显式设置子进程的哈希种子。

import sys
import subprocess

outputs = {}
for hash_seed in xrange(1024):
    outputs[hashseed] = subprocess.check_output([sys.executable, 'program_module.py'], 
                                                env={'PYTHONHASHSEED': str(hash_seed)})