我想使用子进程调用另一个本地脚本。调用另一个python脚本的main()并获取STDOUT结果
本地脚本将其结果打印到屏幕上。
地方:
def main():
"""
main function
controls the method call, the method is decided by TS runner
"""
sParams = ScriptParamHandler()
paramsList = ['TestName'] # ordered list of parameters
paramsDict = sParams.AnalyzeParametersForScript(paramsList)
mainReturn = None
with ProductXXXXX() as testSequence:
testSequence.testFixture.InitDevices()
func = getattr(testSequence, paramsDict['TestName'])
returnVal = func()
print paramsDict['TestName'], "\n", returnVal, "\n"
if __name__ == "__main__":
main()
来电脚本:
with BasicRunner(testSet, testSetLocation, paramsDict['ProfileName']) as testRunner:
if testRunner.CheckFolderAndFile():
testRunner.GetProfile()
for test in testRunner.testList:
testRunner.logger.Info("Test {} started...".format(test))
testResult = subprocess.call(testRunner.tsPyFile + " " + test, shell=True)
testRunner.logger.Info("Test {} result {}".format(test, testResult))
else:
pass
我想主叫脚本testResult
是当地脚本stout
。
我试过stdout=subprocess.PIPE
和subprocess.check_output()
但没有运气,也许有人能给我一些更好的方向?
你尝试testResult.communicate(),而不是subprocess.check_output()? (使用stdout = subprocess.PIPE of course) – shshank
当脚本在同一个python进程中运行时,您也可以重定向stdout。虽然[如果子脚本生成非Python输出(比如来自外部子进程,C扩展库等的输出)] [更复杂](https://gist.github.com/zed/991e006c822740aa6896#file-parent-py)。 – jfs