创建程序的不同运行并使用其输出
Create different runs of a program and use its output
假设我有 2 个模块:caller_module.py
和 program_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)})
假设我有 2 个模块:caller_module.py
和 program_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)})