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.py

0

注,这个方法得不到shell命令的输出。

2、popen()#这个方法能得到命令执行后的结果是一个字符串,要自行处理才能得到想要的信息。


1

2

3

4

5

>>> import os

>>> str = os.popen("ls").read()

>>> a = str.split("\n")

>>> for in a:

        print b

这样得到的结果与第一个方法是一样的。

3、commands模块#可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位


1

2

3

4

5

6

7

8

9

10

11

12

import commands

a,b = commands.getstatusoutput(‘ls‘)

a是退出状态

b是输出的结果。

>>> import commands

>>> a,b = commands.getstatusoutput(‘ls‘)

>>> print a

0

>>> print b

anaconda-ks.cfg

install.log

install.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

时间: 2024-11-05 22:53:58

python subprocess 自动运行实验室程序的相关文章

ubuntu14.04 开机自动运行应用程序

ubuntu14.04 开机自动运行应用程序 - ydt_lwj的专栏 - 博客频道 - CSDN.NET ubuntu下有很多中开机自动运行程序的方法,在开机的不同过程中可以启动不同的程序.如在开机启动时自动运行程序,是通过修改放置在 ???? /etc/rc或 ???? /etc/rc.d 或 ???? /etc/rc?.d ?? 目录下的脚本文件,可以使init自动启动其它程序.例如:编辑 ???? /etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本), 也可以在用

java juint框架的windows自动化-自动运行juint程序简述

在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是junit框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一,与testng差不多平分秋色(好吧,其实是稍微差一点)在上文http://www.cnblogs.com/xuezhezlr/p/7773614.html简单介绍了junit框架后,这里作一个简单的比较 junit框架与传统main函数的主要区别:1junit框架其实质包含多个main函数,相互间

java的mac自动化-自动运行java程序

本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地自动运行java代码 首先如图所示写下如下一段代码 package zlr; import org.junit.Test;public class zlrshiyan { @Test public void test123() throws Exception{ System.out.print (123); }}所在文件的路径是/Users/zlr/IdeaProjects/zlr/src/zlr,如下图,本地代码也可以正常运

java testng框架的windows自动化-自动运行testng程序下篇

本文旨在让读者简单了解testng的自动运行 接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说了一下,读者可以这样认为,ant的那个xml中的代码,因为只是控制了打包和指定testng的xml路径,然后获取执行结果想方法展示,而testng的xml直接控制了运行代码的顺序,包类等参数,直接控制了运行的过程,所以,如果工程主体变动不大,只需要对testng的xml进行改造,从而控制执行的方法,

Tomcat启动时自动运行某程序

项目需要和tmall实现长连接,接收tmall推送的Order消息,然后对消息进行逻辑处理. 目前写了一个servlet,实现了permit的验证,然后对tmall进行长连接操作,启动后,只要tomcat一直运行着,长连接就不会断掉.现在的需求是tomcat启动后我这个servlet自己就运行起来,不用我自己再去访问一下配置的servlet路径. 资料: http://www.cnblogs.com/Payne-Wang/archive/2013/04/01/loadOnTomcatStartu

/etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 的服务启动后,如果我还有其他的动作想要完成时,举例来说, 我还想要寄一封 mail 给某个系统管理帐号,通知他,系统刚刚重新开机完毕,那么, 是否应该要制作一个 shell script 放置在 /etc/rc.d/init.d/ 里面,然后再以连结方式连结到 /etc/rc.d/rc3.d/ 里面

如何在LINUX中开机、登陆、退出、定时、定期自动运行程序

1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置文件继续引导过程,启动其它进程.通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序.例如:编辑 /etc/rc.d/rc.local 文件,在文件最末加上一行“xinit”或“startx”,可以在开机启动后直接进入X-Window. 2.登录时自动运行程序 用户登录时,bash首先自动执行系

linux 开机自动运行

1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置文件继续引导过程,启动其它进程.通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序.例如:编辑 /etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window.     2.登录时自动运行程

SAE部署Python-让云端自动运行Python代码

之前写过模拟登录新浪微博的帖子,然而我并没有去爬过微博的数据,觉得有点浪费,于是就想写一个代码来发微博.写完之后觉得如果能自动发微博就好了,但是我又不可能24小时开始(晚上12点后还会断网),也没有vps(穷学生狗),找过几个免费vps未果,然后想到之前用过新浪SAE,就想能不能在上面试试. 试了一天左右终于让我试出来了!!  基本实现了: 1.定时发送,这里是定时半小时 2.离线自动,基于sae,无需开电脑blabla 但是也有不完美的地方:本地我可以直接模拟登录,但是把代码放到sae上死都不