Python执行系统命令:使用subprocess的Popen函数

使用subprocess的Popen函数执行系统命令
参考:
http://blog.sina.com.cn/s/blog_8f01450601017dlr.html
http://blog.csdn.net/wuwangyingzhong/article/details/6002055
http://www.360doc.com/content/14/0618/15/18227261_387777503.shtml

1、执行shell命令:
Popen函数指定shell=True即可,linux下参数executable将指定程序使用的shell,windows下无须指定。
示例1:在windows下执行cd命令获取当前目录
  1. p2 = Popen('cd',shell=True)

2、执行其他程序


3、指定子进程工作路径:
示例1:
使新建的子进程工作指定的工作目录之下:
  1. import sys,os,subprocess,commands
  2. from subprocess import Popen,PIPE
  3. p2 = Popen('cd',shell=True,stdout=PIPE,cwd='E:\svnworking')
  4. p2.wait()
  5. print "当前目录:%s" %p2.stdout.read()
上述命令使用了cwd,该参数指定了子进程工作目录。这个参数很有用,有时涉及到相对路径的时候必须如果不指定cwd,则程序可能出错。

示例2:
a.py:
  1. p2 = Popen('python c:\b.py',shell=True,stdout=PIPE) #在a.py运行脚本b.py
  2. p2.wait()
  3. print "当前目录:%s" %p2.stdout.read()

b.py
  1. f=open('test.txt','a') #注意这里使用了相对路径
  2. f.close()

当a.py和b.py不在同一个目录的时候,运行a.py肯定报错(找不到指定的文件test.txt)。
原因:因为p2 = Popen('python c:\b.py',shell=True,stdout=PIPE') 创建的子进程与a.py在同一目录下工作,而该目录没有test.py。
解决方法:指定cwd参数。

4、获取Popen的返回值及输出
示例:
  1. # -*- coding: cp936 -*-
  2. #执行另外一个脚本
  3. import sys,os,subprocess,commands
  4. from subprocess import Popen,PIPE
  5. p = Popen('python ' + path + '\getCurPath.py', stdout=PIPE, stderr=PIPE)
  6. p.wait()
  7. if(p.returncode == 0):
  8. print "stdout:%s" %p.stdout.read()









原文地址:https://www.cnblogs.com/topplay/p/3860400.html