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

时间:2015-09-12 08:12:22

标签: python output python-3.4

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

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

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

2 个答案:

答案 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)})