python中调用命令行命令
2015-07-20 18:38
751 查看
http://blog.csdn.net/pipisorry/article/details/46972171
Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库。在Python/wxPython环境下,执行外部命令或者说在Python程序中启动另一个程序的方法。
1、os.system(command)
os.system()函数用来运行shell命令。此命令可以方便的调用或执行其他脚本和命令
这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的。
2、wx.Execute(command,syn=wx.EXEC_ASYNC,callback=None)
若置syn为wx.EXEC_ASYNC则wx.Excute函数立即返回,若syn=wx.EXEC_SYNC则等待调用的程序结束后再返回。
callback是一个wx.Process变量,如果callback不为None且syn=wx.EXEC_ASYNC,则程序结束后将调用wx.Process.OnTerminate()函数。
os.system()和wx.Execute()都利用系统的shell,执行时会出现shell窗口。如在Windows下会弹出控制台窗口,不美观。下面的两种方法则没有这个缺点。
3、import subprocess
subprocess.Popen(args,bufsize=0,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=False,shell=False,cwd=None,env=None,universal_newlines=False,startupinfo=None,creationflags=0)
subprocess.call(["cmd","arg1","arg2"],shell=True)
Note:
1. 参数args可以是字符串或者序列类型(如:list,元组),用于指定进程的可执行文件及其参数。
2. 如果command(args)不是一个可执行文件,shell=True不可省。否则如copy\del命令可能会出现FileNotFoundError错误。
3. Popen.wait()可以得到命令的返回值
4. 如果是windows下的命令,则文件路径如果用的是linux格式会报错:The syntax of the command is incorrect.
举个栗子
如果filename字符串中有空格,则会出现错误:File Not Found错误
可以通过下面
[Python中subprocess学习]
4、webbrowser.open(url)
前面三个方法只能用于执行程序和打开文件,不能处理URL,打开URL地址可用webbrowser模块提供的功能。
调用系统缺省浏览器打开URL地址,如 webbrowser.open('http://www.jb51.net'),也可以利用
webbrowser.open('h:\python.zip')来执行程序。这样可以不必区分是文件名还是URL,不知道在Linux下是否可行。
以上在Windows2000,Python2.4a1,wxPython 2.5.1运行。
[python调用shell的方法]
5. os.popen(command[,mode[,bufsize]])
举个栗子
>>> import os
>>> p = os.popen("dir c:",'r')
>>> p.read()
bla bla... <这里是dir正确的输出>
>>> p.close()
>>> p = os.popen("dir d:",'r') # 电脑中没有D盘
>>> p.read()
''
>>> p.close()
1
>>>
可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。
6. 使用commands模块
举个栗子
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0,'/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256,'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256,'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
根据你需要的不同,commands模块有三个方法可供选择。getstatusoutput,getoutput,getstatus。
皮皮blog
7. Python文档中目前全力推荐第四个方法,subprocess!
subprocess使用起来同样简单:
>>> subprocess.call(["ls","-l"],shell=True)
0
>>> subprocess.call("ls -l",shell=True)
0
>>> subprocess.call("exit 1",shell=True)
1
直接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用shell=True。建议使用Python库来代替shell命令,或使用pipe的一些功能做一些转义。:
一个例子
1. 启动virtualenv是一个shell命令,要在shell中执行。否则出错:WindowsError: [Error 193] %1 is not a valid Win32 application
2. 然而virtualenv中执行的命令并不是shell命令,不是在shell中执行的,直接运行即可。否则出错:'scrapy' is not recognized as an internal or external command,operable program or batch file.
如果你更关注命令的终端输出,可以这样
>>> subprocess.check_output(["echo","Hello World!"])
'Hello World!\n'
>>> subprocess.check_output("exit 1",shell=True)
Traceback (most recent call last):
...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
8. 还有两种方法:os.spawn* 和 popen2.*。它们也可以完成同样的任务
Python和其他进程的管道通信方式--popen和popen2的比较
9. sh : Python subprocess interface
lz发现了一个相当不错的库amoffat/sh
这个库已经被津津乐道很久了。看代码:
from sh import git
git.clone("https://github.com/amoffat/sh")
from:/article/1480526.html
ref:python中执行linux命令(调用linux命令)
6方法,python中执行shell命令
Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库。在Python/wxPython环境下,执行外部命令或者说在Python程序中启动另一个程序的方法。
1、os.system(command)
os.system()函数用来运行shell命令。此命令可以方便的调用或执行其他脚本和命令
#打开指定的文件 >>>os.system('notepad *.txt')
这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的。
2、wx.Execute(command,syn=wx.EXEC_ASYNC,callback=None)
若置syn为wx.EXEC_ASYNC则wx.Excute函数立即返回,若syn=wx.EXEC_SYNC则等待调用的程序结束后再返回。
callback是一个wx.Process变量,如果callback不为None且syn=wx.EXEC_ASYNC,则程序结束后将调用wx.Process.OnTerminate()函数。
os.system()和wx.Execute()都利用系统的shell,执行时会出现shell窗口。如在Windows下会弹出控制台窗口,不美观。下面的两种方法则没有这个缺点。
3、import subprocess
subprocess.Popen(args,bufsize=0,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=False,shell=False,cwd=None,env=None,universal_newlines=False,startupinfo=None,creationflags=0)
subprocess.call(["cmd","arg1","arg2"],shell=True)
Note:
1. 参数args可以是字符串或者序列类型(如:list,元组),用于指定进程的可执行文件及其参数。
2. 如果command(args)不是一个可执行文件,shell=True不可省。否则如copy\del命令可能会出现FileNotFoundError错误。
3. Popen.wait()可以得到命令的返回值
4. 如果是windows下的命令,则文件路径如果用的是linux格式会报错:The syntax of the command is incorrect.
举个栗子
if subprocess.Popen('dir /b %s' % filename,shell=True).wait() == 0
如果filename字符串中有空格,则会出现错误:File Not Found错误
可以通过下面
[
"cmd"
,
"arg1"
,
"arg2"
]两种方式
if subprocess.Popen(["dir","/b",filename],shell=True).wait() == 0
if subprocess.call(["dir","/b",filename],shell=True) == 0
[Python中subprocess学习]
4、webbrowser.open(url)
前面三个方法只能用于执行程序和打开文件,不能处理URL,打开URL地址可用webbrowser模块提供的功能。
调用系统缺省浏览器打开URL地址,如 webbrowser.open('http://www.jb51.net'),也可以利用
webbrowser.open('h:\python.zip')来执行程序。这样可以不必区分是文件名还是URL,不知道在Linux下是否可行。
以上在Windows2000,Python2.4a1,wxPython 2.5.1运行。
[python调用shell的方法]
5. os.popen(command[,mode[,bufsize]])
举个栗子
>>> import os
>>> p = os.popen("dir c:",'r')
>>> p.read()
bla bla... <这里是dir正确的输出>
>>> p.close()
>>> p = os.popen("dir d:",'r') # 电脑中没有D盘
>>> p.read()
''
>>> p.close()
1
>>>
可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。
6. 使用commands模块
举个栗子
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0,'/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256,'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256,'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
根据你需要的不同,commands模块有三个方法可供选择。getstatusoutput,getoutput,getstatus。
皮皮blog
7. Python文档中目前全力推荐第四个方法,subprocess!
subprocess使用起来同样简单:
>>> subprocess.call(["ls","-l"],shell=True)
0
>>> subprocess.call("ls -l",shell=True)
0
>>> subprocess.call("exit 1",shell=True)
1
直接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用shell=True。建议使用Python库来代替shell命令,或使用pipe的一些功能做一些转义。:
一个例子
1. 启动virtualenv是一个shell命令,要在shell中执行。否则出错:WindowsError: [Error 193] %1 is not a valid Win32 application
2. 然而virtualenv中执行的命令并不是shell命令,不是在shell中执行的,直接运行即可。否则出错:'scrapy' is not recognized as an internal or external command,operable program or batch file.
subprocess.call(r'..\Scripts\activate',shell=True)
subprocess.call('scrapy crawl dmoz')
如果你更关注命令的终端输出,可以这样
>>> subprocess.check_output(["echo","Hello World!"])
'Hello World!\n'
>>> subprocess.check_output("exit 1",shell=True)
Traceback (most recent call last):
...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
8. 还有两种方法:os.spawn* 和 popen2.*。它们也可以完成同样的任务
Python和其他进程的管道通信方式--popen和popen2的比较
9. sh : Python subprocess interface
lz发现了一个相当不错的库amoffat/sh
这个库已经被津津乐道很久了。看代码:
from sh import git
git.clone("https://github.com/amoffat/sh")
from:/article/1480526.html
ref:python中执行linux命令(调用linux命令)
6方法,python中执行shell命令
相关文章推荐
- python命令行退出
- python time模块
- python 入门(一)
- Python的lambda函数与排序
- Python变量的作用域
- python对json数据的处理
- Python简单调用MySQL存储过程并获得返回值的方法
- python实现输出日历
- 用python搭建临时的服务器
- python实现Telnet远程登陆到设备并执行命令
- Python学习笔记——Django配置问题1:syncdb
- python脚本语言3
- Python *与** 参数问题
- Google's Python Class(四)——Python 排序
- Python小实验:查看平台信息/处理谐波信号(面向对象)
- python中的os.path.dirname(__file__)的使用
- Python Static Method
- 在Python的Django框架中编写编译函数
- python 读取配置文件
- python访问MySQL数据库