Python 板


LINE

※ 引述《uranusjr (←这人是超级笨蛋)》之铭言: : ※ 引述《Holocaust123 (一步一脚印)》之铭言: : : #!/usr/bin/python : : #coding=utf8 : : import subprocess : : cmd = 'test.sh' : : p = subprocess.Popen(cmd) : : print 'end of program' : : 假设上面是a.py的内容 : : 有几个问题想问: : : 1. 如何让a.py执行时, 不要等待test.sh的执行结果, 而是直接执行print statement : : 我仔细看过 http://docs.python.org/library/subprocess.html: : 但这个module似乎没有类似os module的"no wait"功能 : 咦? : Popen 本来就不会 wait 吧 : 要强制停下来等它执行完再继续, 必须加上(以你的例子) p.wait() 等 p 结束 : 除非你把 stdout 或/和 stderr 给 PIPE 到父程序, 那会自动变成 blocking : 不过这是非常合理的设定... : : 2. 如何让a.py执行结束後, 不要terminate subprocess(即让test.sh在a.py结束後依然继续执行) : : 目前我找到的方法只能在Linux上使用(用nohup指令) : : 但我想找跨平台的作法, 也就是在Windows或Linux上皆适用的方法 : subprocess 创造出来的子程序确实不会在父程序结束後同时停止, 会执行到完啊... : 我在 Mac (OS X 10.6) 和 Linux (Mint 10) 上分别用 2.6.x 确认过了, 都一样 : 不确定 Windows 的状况, 不过应该不会有差才对? : : 这两个问题困扰我很久了, 希望好心人能指点一下 : : 如果可以的话希望不要提供deprecated modules的作法, 谢谢 第一眼看完u大的回文跟上面几篇文时 我还以为我看错了 怎麽情况跟我完全不一样 我的情况是只要父程序一终止 子程序也会跟着终止 屡试不爽 怎麽会这样呢? 後来终於找到问题点... 环境 OS: Xubuntu 11.04 Python: 2.7.1 编辑器: Vim 7.3 我的Vim设定档中有这一段 if has('unix') && (!has('gui_running')) au FileType python map <silent> <buffer> <F10> <ESC>:w<CR>:!screen bash -c "python \"%\" ; read -p \"press ENTER to continue...\""<CR> 这段的作用是 只要Vim编辑的档案的类型是python文字档(即.py, 假设档名叫a.py) 按下F10就会执行这行指令: screen bash -c "python a.py ; read -p \"press ENTER to continue...\"" 这行指令的用途是: 避免Vim编辑a.py的视窗在以外部指令执行python a.py时冻结住 换句话说就算a.py正在执行 依然可以用Vim编辑a.py (这边我讲的很粗略 详情可看#1DANDkhR (Editor)) screen指的是gnu screen( http://www.gnu.org/s/screen/ ) 意思就是在terminal开启一个新的screen window来执行python程式a.py 在a.py执行完闭後 在该window显示"press ENTER to continue..." 显示这个prompt("press...")的目的是, 让user(我)有机会看到a.py输出到萤幕的内容, 而非直接关闭该window 假设a.py的内容如下: #!/usr/bin/python #coding=utf8 import subprocess raw_input('press enter to launch frd...\n') cmd = 'frd.sh' p = subprocess.Popen(cmd, shell=True) raw_input('end') 用Vim打开a.py, 按F10执行之 会产生一个新screen window在terminal, 萤幕显示"press enter to launch frd..." 按下enter, frd.sh就会被执行, frd GUI程式跳出来了(frd是一个GUI程式, frd.sh是用来开启他的) 然後马上会看到萤幕显示"end", 按下enter, 萤幕会显示"press ENTER to continue..." 按下enter, frd GUI就被关掉了 => 这就是为什麽我本来以为subprocess预设是"父死子就死"的原因 但其实subprocess如同u大所说 并非"父死子就死"的原因 真正导致frd GUI(子)终止的的原因是上面绿色那行... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.31.149
1F:→ hSATAC:感觉你的 vimrc 里面很多你不清楚的东西 (editor版的印象) 07/14 23:48
2F:→ hSATAC:要不要找一天好好把 vimrc 整一次啊 XD 07/14 23:49
我的vimrc我很清楚啊(每一行都仔细研究过的) 但缺乏整理是真的 ※ 编辑: Holocaust123 来自: 140.112.31.149 (07/14 23:50)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP