作者wawawa (哇哇哇○( ̄﹏ ̄)○)
看板Python
标题Re: [问题] os.system问题??
时间Mon Jul 14 23:42:45 2008
: 而且还可以继续按按钮的吗?
: 请帮帮忙!!
: 很需要解决这个问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.230.101.120
1F:推 rexrainbow:推~ 07/10 16:11
2F:推 jameschen113:赞! 谢谢分享 07/12 11:28
3F:推 huggie:这跟那些popen有什麽样子的差异? 07/14 13:59
这个 subprocess 好像是看某前辈的 blog 才得知的东西... 这模组提供了更高阶的
API,来试图隐藏不同平台呼叫 process 的细节。 在
http://docs.python.org/lib/module-subprocess.html
有提到它试图取代以下常用的呼叫:
os.system
os.spawn*
os.popen*
popen2.*
commands.*
至於详细的用法,可以参考:
http://docs.python.org/lib/node533.html
会藉由简单范例示范每种不同的呼叫方式...
而在原来的这个问题当中,原 po 一直遇到会出现一个终端机的问题
那是因为如果使用 os.system('test blah blah') 的呼叫,在 windows 会有以下行为:
你的 python 程式 ->(呼叫) cmd.exe ->(呼叫并传参数 blah blah) test
而在 unix 会有以下行为:
你的 python 程式 ->(呼叫) shell ->(呼叫并传参数 blah blah) 你想执行的程式
以上如果是使用 subprocess,则语法是
subprocess.call('test blah blah', shell=True)
其中 shell=True 若没有指定则预设是 False
所以为了要避免出现终端机视窗,最好是可以跳过 cmd.exe/shell 直接呼叫命令
也就是流程变成:
你的 python 程式 ->(呼叫并传参数 blah blah) test
那使用 subprocess 则就是(预设是 shell=False 所以在这边省略):
subprocess.call('test blah blah'.split())
至於为何要切成 list 这个就扯到 popen / exec* 这一系列的呼叫实际运作的过程了
其实站在使用者立场可以不用管它,你就记得要切成 list 就对了
--
废话好像太多了 囧>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.127.40.50
※ 编辑: wawawa 来自: 140.127.40.50 (07/14 23:46)
※ 编辑: wawawa 来自: 140.127.40.50 (07/14 23:47)
4F:→ wawawa:我好像是从 yungyuc 大的 blog 看来的...有点忘了抱歉 Orz 07/14 23:51