shell 下运行python shell 清屏命令有什么办法暂停

8281人阅读
有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:
1.&os 模块
1.1. os模块的exec方法族
Python的exec系统方法同Unix的exec系统调用是一致的。这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。( 这个看了点 help(os) &--& search &exec& 的相关介绍,但是没太搞明白咋使用)
1.2. os模块的system方法
system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。
&&&&import&os&&&&&&os.system(&echo&\&Hello&World\&&)&&&&&Hello&World&&&&&&&&&——————&&打印命令结果&&0&&&&&&&&&&&&&&&&&&&——————&&What's&this&?&返回值?&&&&&&val&=&os.system(&ls&-al&|&grep&\&log\&&&)&&&&&-rw-r--r--&&1&root&&&&&&&root&&&&&&&6030829&Dec&31&15:14&log&&&&——————&&此时只打印了命令结果&&&&&&print&val&&&&&&&&&&&&&0&&&&&&&&&&&&&&&&&&&——————&&注意,此时命令正常运行时,返回值是0&&&&&&val&=&os.system(&ls&-al&|&grep&\&log1\&&&)&&&&&&print&val&&&&&&&&&256&&&&&&&&&&&&&&&&&——————&&使用os.system调用一个没有返回结果的命令,返回值为256~&&&&&&&&
注意:上面说了,此方法脂肪会外部程序的结果,也就是os.system的结果,所以如果你想接收命令的返回值,接着向下看~
1.3. os模块的popen方法
当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()
&&&&os.popen('ls&-lt')&&&&&&&&&&&&&&&&&&&&&open&file&'ls&-lt&',&mode&'r'&at&0xb7585ee8&&&&&&&print&os.popen('ls&-lt').read()&&&&&&&total&6064&&-rwxr-xr-x&1&long&&&&&&&long&&&&&&&&&&&&23&Jan&&5&21:00&hello.sh&&-rw-r--r--&1&long&&&&&&&long&&&&&&&&&&&147&Jan&&5&20:26&Makefile&&drwxr-xr-x&3&long&&&&&&&long&&&&&&&&&&4096&Jan&&2&19:37&test&&-rw-r--r--&1&root&&&&&&&root&&&&&&&6030829&Dec&31&15:14&log&&drwxr-xr-x&2&long&&&&&&&long&&&&&&&&&&4096&Dec&28&09:36&pip_build_long&&drwx------&2&Debian-gdm&Debian-gdm&&&&4096&Dec&23&19:08&pulse-gylJ5EL24GU9&&drwx------&2&long&&&&&&&long&&&&&&&&&&4096&Jan&&1&&1970&orbit-long&&&&&&val&=&os.popen('ls&-lt').read()&&&&&&&&&&&if&&log&&in&val:&&&&&&&&&&&&&&&&&&&&&&...&&&&&print&&Haha,there&is&the&log&&&...&else:&&...&&&&&print&&No,not&happy&&&...&&Haha,there&is&the&log&&
2. commands 模块
使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法: &
* & commands.getstatusoutput(cmd) & & & & 返回(status, output)
* & commands.getoutput(cmd) & & & & & & & & & 只返回输出结果
* & commands.getstatus(file) & & & & & & & & & & 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法
long@zhouyl:/tmp/tests$&python&&Python&2.7.3&(default,&Jan&&2&2013,&16:53:07)&&&[GCC&4.7.2]&on&linux2&&Type&&help&,&&copyright&,&&credits&&or&&license&&for&more&information.&&&&&&import&commands&&&&&&commands.getstatusoutput('ls&-lt')&&&&&&&&(0,&'total&5900\n-rwxr-xr-x&1&long&long&&&&&&23&Jan&&5&21:34&hello.sh\n-rw-r--r--&1&long&long&&&&&147&Jan&&5&21:34&Makefile\n-rw-r--r--&1&long&long&6030829&Jan&&5&21:34&log')&&&&&&commands.getoutput('ls&-lt')&&&&&&&&&&&&&&'total&5900\n-rwxr-xr-x&1&long&long&&&&&&23&Jan&&5&21:34&hello.sh\n-rw-r--r--&1&long&long&&&&&147&Jan&&5&21:34&Makefile\n-rw-r--r--&1&long&long&6030829&Jan&&5&21:34&log'&&&&&&commands.getstatus('log')&&&&&&&&&&&&&&&&&'-rw-r--r--&1&long&long&6030829&Jan&&5&21:34&log'&&&&&&&&
3. subprocess模块
根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。
&&&&from&subprocess&import&call&&&&&&call([&ls&,&&-l&])&&
subprocess与system相比的优势是它更灵活(你可以得到标准输出,标准错误,“真正”的状态代码,更好的错误处理,等..)。我认为使用os.system已过时,或即将过时。
4. 众方法的比较以及总结
4.1. 关于 os.system&
os.system(&some_command with args&)将命令以及参数传递给你的系统shell,这很好,因为你可以用这种方法同时运行多个命令并且可以设置管道以及输入输出重定向。比如:
os.system(&some_command & input_file | another_command & output_file&)
然而,虽然这很方便,但是你需要手动处理shell字符的转义,比如空格等。此外,这也只能让你运行简单的shell命令而且不能运行外部程序。
4.2. 关于os.popen
使用stream = os.popen(&some_command with args&)也能做与os.system一样的事,与os.system不同的是os.popen会返回一个类文件对象,使用它来访问标准输入、输出。
4.3. 关于subprocess.popen
subprocess模块的Popen类,意图作为os.popen的替代,但是因为其很全面所以比os.popen要显得稍微复杂。
比如你可以使用 &print Popen(&echo Hello World&, stdout=PIPE, shell=True).stdout.read() &来替代 &print os.popen(&echo Hello World&).read()。但是相比之下它使用一个统一的类包括4中不同的popen函数还是不错的。
4.4. 关于subprocess.call
subprocess模块的call函数。它基本上就像Popen类并都使用相同的参数,但是它只简单的等待命令完成并给你返回代码。比如:
return_code = subprocess.call(&echo Hello World&, shell=True)
os模块中还有C中那样的fork/exec/spawn函数,但是我不建议直接使用它们。subprocess可能更加适合你。
===========================================
[1] //python-shell-command/index.html
[2] http://m.blog.csdn.net/blog/overstack/9295995
[3] http://blog.csdn.net/swiftshow/article/details/7755543
下面是对于文中所涉及的内容的python官方文档:
[4]&http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module & & & -- 关于使用subprocess 替代老的方法
[5]&http://docs.python.org/lib/os-process.html & & -- os的exec方法族以及system方法
[6]&http://docs.python.org/lib/os-newstreams.html & &-- os的popen方法
[7]&http://docs.python.org/lib/node528.html & &-- os的subprocess介绍
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:164101次
积分:3707
积分:3707
排名:第3182名
原创:183篇
转载:183篇
(3)(2)(2)(2)(2)(16)(19)(28)(33)(25)(20)(26)(35)(22)(38)(30)(14)(13)(7)(13)(15)(2)4408人阅读
1.用os.system(cmd)&& 不过取不了返回值
2.用os.popen(cmd)&& 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()
3.用&commands&模块。其实也是对popen的封装。此模块主要有如下方法
commands.getstatusoutput(cmd) 返回(status,&output).commands.getoutput(cmd) 只返回输出结果commands.getstatus(file) 返回ls&-ld&file的执行结果字符串,调用了getoutput,不建议使用此方法.如
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')
&&& commands.getstatus('/bin/ls')
'-rwxr-xr-x
13352 Oct 14
1994 /bin/ls'
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:114477次
积分:1518
积分:1518
排名:第11735名
原创:24篇
转载:78篇
评论:13条
(1)(1)(1)(2)(1)(4)(2)(1)(2)(5)(7)(2)(3)(1)(4)(6)(1)(1)(1)(5)(1)(8)(1)(3)(3)(2)(1)(5)(10)(2)(2)(5)(5)(3)py文件如何在shell里面用命令行运行啊?_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:21,945贴子:
py文件如何在shell里面用命令行运行啊?收藏
py文件如何在shell里面用命令行运行啊?
你这是idle,不是shell,shell运行是打开cmd。而且你得先设置好环境变量
你看就是这个图,我找这个做的,结果出现语法错误。。
在你的cmd里面,输入Python abc.py就可以运行了
当你打算放弃梦想时,告诉自己再多撑一天、一个星期、一个月,再多撑一年吧。你会发现,拒绝退场的结果令人惊讶。
楼主,解决了吗?
我也是遇见这个问题
windows的cmd不能直视
茫茫人海,没有人不喜欢幸福的,没有人不期待幸福的,没有人不向往幸福的。但不同的时代有着不同的理解,不同的阶层有着不同的看法,不同的年龄有着不同的要求。无论怎么不同,有一点却是相同的,那就是幸福降临的时候,会感到比美妙更美妙,比快乐更快乐,总会激动不已甚至泪流满面。
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 python shell 命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信