Python调用其他脚本获取全部输出结果如何实现

sangyuping 2016-04-29 04:48:43
Hi,
学习过程中,有这么一个问题想问下大家:
def run_fail_test(test_list):
for testcase in test_list.split(","):


status,output = commands.getstatusoutput("/usr/bin/python "+testcase)
print outpout


如果我是用上面的语句中,想在output中得到这个command命令执行的过程,我想print output,但是发现失败了,一直停留在我运行的环境下,不往下执行,我手动用ctrl+c停止后,报的错误信息如下:

Traceback (most recent call last):
File "/home/user/script/manual_test_2.py", line 420, in <module>
main()
File "/home/user/script/manual_test_2.py", line 109, in main
ret = run_fail_test(options.script)
File "/home/yusang/script/ipconn/manual_test_2.py", line 300, in run_fail_test
status,output = commands.getstatusoutput("/usr/bin/python "+testcase)
File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/commands.py", line 54, in getstatusoutput
text = pipe.read()



我先实现的功能如下,就不知道该如何做了:



首先,我需要捕获到在/usr/bin/python 下执行的testcase (testcase是一个变量,实际它是一些python脚本),这样调用会直接运行python脚本,我需要获取运行该python脚本的全部内容,应该如何实现呢?
我想把这个内容重定向到某个文件夹中或者能够直接判断在这些内容中是否有如下字段:\n\rxxxCase.*Fail(这里是需要正则匹配项查找的内容的,又应该如何实现呢?)

谢谢各位大牛了
...全文
666 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sangyuping 2016-05-03
  • 打赏
  • 举报
回复
引用 2 楼 CDSoftwareWj 的回复:
我不知道你用过 subprocess 没有 我一直在用 你可以看看 https://docs.python.org/2/library/subprocess.html
我看了您的subprocess的介绍,也试着写了,但是报错,我不知道是什么原因,是这样的,我的确是类似于单元测试,我要调用的python脚本里执行了很多的子case,每个case结束后,都有一个pass或者failed的提示,所以,我需要获取到执行这些python脚本的全部过程,然后再判断是否包含failed pass
def run_fail_test(test_list):
297     for testcase in test_list.split(","):
298        # os.system("/usr/bin/python "+testcase)
299         command = "/usr/bin/python "+testcase
300         print command
301         #args = shlex.split(command)
302        # print args
303         children = subprocess.Popen(["/usr/bin/python",testcase],stdout=subprocess.PIPE)
304         stdoutput = children.communicate
305         if "Fail" in stdout :
306           print "testcase have failed case,need to check!"
307           exit(1)
308         else :
309           print "run testcase pass"
310           return 0
311
这个函数的定义如上,但是,最后会失败,失败的信息如下: m = child.expect([self.newkeyPrompt, self.psswdPrompt, pexpect.EOF]) File "/usr/lib/python2.4/site-packages/pexpect.py", line 1311, in expect return self.expect_list(compiled_pattern_list, timeout, searchwindowsize) File "/usr/lib/python2.4/site-packages/pexpect.py", line 1325, in expect_list return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize) File "/usr/lib/python2.4/site-packages/pexpect.py", line 1378, in expect_loop c = self.read_nonblocking (self.maxread, timeout) File "/usr/lib/python2.4/site-packages/pexpect.py", line 841, in read_nonblocking self.logfile_read.flush() IOError: [Errno 32] Broken pipe 所以,我想知道问题出在哪里呢,如果我用os.system去执行,是没有错误的
待卿莞尔时 2016-04-29
  • 打赏
  • 举报
回复
testcase应该是文件路径吧。打印一下 python testcase看看是不是有效的。看起来是执行卡在第一步就没进行下去。
CDSoftwareWj 2016-04-29
  • 打赏
  • 举报
回复
我不知道你用过 subprocess 没有 我一直在用 你可以看看 https://docs.python.org/2/library/subprocess.html
xiaohutushen30 2016-04-29
  • 打赏
  • 举报
回复
既然也是python脚本 那为什么不直接把python脚本导入到你的项目,然后直接进行函数调用就行了,不必要这么执行呀 动态的import进来 http://www.cnblogs.com/huangjacky/archive/2012/08/22/2650878.html

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧