假设我有2个模块:caller_module.py
和program_module.py
。我需要通过caller_module.py
来创建program_module.py
的多次运行(这样我每次运行时都会得到不同的PYTHONHASHSEED)。
然后我需要使用program_module.py
每次运行中创建的输出并对其进行一些比较。
问题:
如何动态创建program_module.py
的不同运行以及如何获取其输出? (比较输出很容易)
答案 0 :(得分:1)
我并不完全清楚你要做什么,你需要什么样的论据等等。但作为第一个近似,请看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()
将返回被调用程序写入stdout
的任何内容。最简单的方法是通过内置的print()
函数。 print()
以check_output()
作为字符串返回output
的内容,因此我在上面的示例中设置为<add name="PayRollContext" connectionString="data source=ATI_SHAH\SQLEXPRESS;initial catalog=PayRollManagmentSystem;multipleactiveresultsets=True;integrated security=True;App=EntityFramework">
的变量就是您要查看的内容。
答案 1 :(得分:0)
您可以使用subprocess模块创建流程。它具有名为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)})