python subprocess 自动运行实验室程序
import threading, os, subprocess, time exec_path = "/home/xhz/gems/ruby/amd...../bin/tester.exec" out_data_path = "/home/xhz/...generated/" max_process = 5 processes = set() exec_commands = [] for id in xrange(1,45,2):
stat_filename = out_data_path + 'stat_' + str(id) + '.txt'
config_filename = out_data_path + 'config_' + str(id) + '.txt'
command = "/home/xhz/gems/ruby.../tester.exec -l 1000000 -i " + str(id*0.001) +" -f 1 -d 2 -x 4 -j 0 --stat_output_file " + stat_filename + " --config_output_file " + config_filename
exec_commands.append(command) for command in exec_commands:
print command
processes.add(subprocess.Popen(command, shell=True))
while len(processes) >= max_process):
time.sleep(60)
new_process = set()
for p in processes:
print p
if(p.poll() is not None): #terminated
new_processes.add(p) #collect all threads that terminate processes.difference_update(new_process) #remove elements found in new_process
参考材料:
来自:http://zhou123.blog.51cto.com/4355617/1312791
这里介绍一下python执行shell命令的四种方法:
1、os模块中的os.system()这个函数来执行shell命令
|
1
2
3
|
>>> os.system('ls')anaconda-ks.cfg install.log install.log.syslog send_sms_service.py sms.py0 |
注,这个方法得不到shell命令的输出。
2、popen()#这个方法能得到命令执行后的结果是一个字符串,要自行处理才能得到想要的信息。
|
1
2
3
4
5
|
>>> import os>>> str = os.popen("ls").read()>>> a = str.split("\n")>>> for b in a: print b |
这样得到的结果与第一个方法是一样的。
3、commands模块#可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位
|
1
2
3
4
5
6
7
8
9
10
11
12
|
import commandsa,b = commands.getstatusoutput('ls')a是退出状态b是输出的结果。>>> import commands>>> a,b = commands.getstatusoutput('ls')>>> print a0>>> print banaconda-ks.cfginstall.loginstall.log.syslog |
commands.getstatusoutput(cmd)返回(status,output)
commands.getoutput(cmd)只返回输出结果
commands.getstatus(file)返回ls -ld file 的执行结果字符串,调用了getoutput,不建议使用这个方法。
4、subprocess模块
使用subprocess模块可以创建新的进程,可以与新建进程的输入/输出/错误管道连通,并可以获得新建进程执行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。
import subprocess
1、subprocess.call(command, shell=True)
#会直接打印出结果。
2、subprocess.Popen(command, shell=True) 也可以是subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) 这样就可以输出结果了。
如果command不是一个可执行文件,shell=True是不可省略的。
shell=True意思是shell下执行command
这四种方法都可以执行shell命令。
官网:https://docs.python.org/2/library/subprocess.html?highlight=popen
同时发了一个好的博客:http://blog.linuxeye.com/category/python
关于subprocess 的一些介绍 http://ipseek.blog.51cto.com/1041109/807513
python subprocess 自动运行实验室程序的更多相关文章
- java testng框架的windows自动化-自动运行testng程序上篇
本文旨在让读者简单了解testng的自动运行 怎么说呢,在网上已经有了各个前辈进行代码演示以及分享,我力争说到点子上 接上文,之前讲的大部分是juint的自动化代码运行,从未涉及到testng,但是在 ...
- NanoPC-T4/RK3399开发板Ubuntu FriendlyCore系统开机自动运行客户程序
RK3399开机自动运行客户程序 比如hellohello.c 交叉编译:aarch64-linux-gcc hello.c -o hello使用SecureCRT软件通过串口下载到开发板rz修改文件 ...
- python实现自动重启本程序的方法 技术的漩涡
python实现自动重启本程序的方法 http://www.jb51.net/article/69174.htm import requests, time url_l = []with open(' ...
- java juint框架的windows自动化-自动运行juint程序简述
在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...
- 在Linux中以普通用户开机自动运行脚本程序
测试环境:CentOS6.5 管理员:root 普通用户:test1 实现目标:在Linux启动时,以普通用户test1自动运行位于根目录下的脚本程序test.py,该程序会在每次执行时自动向本地日志 ...
- java的mac自动化-自动运行java程序
本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地自动运行java代码 首先如图所示写下如下一段代码 package zlr;import org.junit.Test;public ...
- java的windows自动化-自动运行java程序
那么在一些工具齐全并且已经有了一定的写好的java程序的情况下(环境变量和软件见上一章http://www.cnblogs.com/xuezhezlr/p/7718273.html),如何自动化运行j ...
- java testng框架的windows自动化-自动运行testng程序下篇
本文旨在让读者简单了解testng的自动运行 接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说 ...
- python在mapreduce运行Wordcount程序
首先脚本文件: mapper.py: #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words ...
随机推荐
- 移动端click事件延迟300ms的原因以及解决办法
这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点 ...
- log4net 记录日志到sqlserver
参考:http://blog.csdn.net/niuyongjie/article/details/5777625 demo
- 用R实现全排列的分类
R 其实是个很好用的东东哦-最近写了个小函数,可以实现全排列数的枚举,代码如下: permut<-function(seq){ seq_len=length(seq); if(s ...
- tomcat开机启动
最近老板租了个阿里云的服务器,动不动就自动重启,搞得我还得有事没事盯着服务器,谁知道它什么时候会重启啊,为了让自己不要那么累,也为了不要造成不必要的麻烦,还是把tomcat改成开机启动的程序吧. 网上 ...
- python之路-Day10
操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...
- IDEA内存溢出问题:
-Xms1024m -Xmx1024m -XX:MaxPermSize=512m 内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解 ...
- HTTP认证机制(翻译)
发现一篇介绍HTTP认证的好文章,就尝试翻译了一下,记录在下面.(翻译的很挫,哈哈哈) 原文: http://frontier.userland.com/stories/storyReader$215 ...
- css基础不扎实
写了两周的网页,发现自己的css基础还是很差的,当时培训学习的时候就发现了,我做的页面都特别的别扭和丑吧,在班级上应该是垫底的: 原先只知道用float,不会使用定位,网页连固定定位也不会,现在发现, ...
- JavaScript 学习小结
简要的功能点: 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. 操作 HTML 元素 d ...
- C# 开源压缩组件比较
SevenZipSharp check()为检查压缩包,有BUG,360创建的zip压缩包有无密码,密码错对都返回true DotNetZip 提供的函数比较人性化,缺点是只支持zip SharpCo ...