免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 18570 | 回复: 7
打印 上一主题 下一主题

请教问题,怎么也才能使python执行完上一个命令,再执行下一条语句? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-13 10:23 |只看该作者 |倒序浏览
请教问题,怎么也才能使python执行完上一个命令,再执行下一条语句?就是先等os.popen()执行完,再执行下面的语句?
当我用一个循环时,就连续打开很多的进程,如何让os.popen()执行完,再进入下次循环呢?
    for thefile in thefiles:
        os.popen('F:\\video\\Encoder\\CMDApp.exe')

论坛徽章:
0
2 [报告]
发表于 2009-02-13 10:51 |只看该作者

回复 #1 GGclub 的帖子

看不懂你写的东西
thefiles是什么?
你的意思是不是 每运行一次thefile
下一句都执行一次os.popen
for thefile in thefiles:
        os.popen(thefile)
这样应该可以
还说说

论坛徽章:
0
3 [报告]
发表于 2009-02-13 10:51 |只看该作者
os.popen是阻塞的,不执行完不会执行下条语句的
更精确的控制查看 subprocess 模块

论坛徽章:
0
4 [报告]
发表于 2009-02-13 10:58 |只看该作者

回复 #1 GGclub 的帖子

建议你用subprocess的Popen,比较容易控制,而且能得到更多的IO信息。subprocess.Popen()有个wait()表示等待子进程结束。
或者更简洁一点,如果你只是想执行一条外部命令,不想得到其他信息,可以用os.system()。os.popen好像在2.4还是2.5之后就不推荐使用了。

论坛徽章:
0
5 [报告]
发表于 2009-02-13 10:59 |只看该作者

回复 #2 zhenglxd 的帖子

thefiles  是这样一个数组

['F:\\video\\video\\1634_1218952645.mp4', 'F:\\video\\video\\15403_1224907834.3gp', 'F:\\video\\video\\15403_1224907900.3gp', 'F:\\video\\video\\15403_1224907940.3gp', 'F:\\video\\video\\17819_1230866686.avi', 'F:\\video\\video\\20562_1231340781.mp4', 'F:\\video\\video\\26037_1222155983.avi', 'F:\\video\\video\\32570_1224486388.avi', 'F:\\video\\video\\32718_1227697742.rm', 'F:\\video\\video\\36519_1220788873.mpg', 'F:\\video\\video\\37057_1230190526.mp4']
程序是这样的  listFiles('F:\\video\\video', '*.mp4;*.avi;*.3gp;*.rmvb;*.rm;*.mpg;*.wmv;*.swf)是遍历'F:\\video\\video'目录下的文件,然后循环转化
if __name__ == '__main__':
    thefiles = listFiles('F:\\video\\video', '*.mp4;*.avi;*.3gp;*.rmvb;*.rm;*.mpg;*.wmv;*.swf')
    for thefile in thefiles:
        flvfile,exc=os.path.splitext(thefile)
        flvfile = flvfile+'.flv'
        os.popen('''F:\\video\\Encoder\\EncoderCMDApp.exe /src:"'''+thefile+'''" /dest:"'''+flvfile)

论坛徽章:
0
6 [报告]
发表于 2009-02-13 11:00 |只看该作者
for thefile in thefiles:
    sub = os.popen('F:\\video\\Encoder\\CMDApp.exe')

默认只是一个Process执行的. 也就是按照顺序执行的;

如果你用
for thefile in thefiles:
    sub = subprocess.Popen('E:\\tmp\\py\\test.cmd')
    sub.wait();
这样是New出来新的Process然后执行. 可根据wait()等待上次的执行完毕后,继续NewProcess开始执行下一个.

论坛徽章:
0
7 [报告]
发表于 2009-02-13 11:36 |只看该作者

回复 #6 bohemia 的帖子

正解,首先谢谢bohemia 提醒我跟踪了执行流程 os.popen(CMD)是顺序执行的,视频转化很费时的,在我执行时很快就连续打开了很多个转换文件,感觉就像多进程打开了一样,经跟踪执行流程发现是好多视频格式不对,当格式不对时就跳过去了,给我的错觉是多进程同时打开了。在这谢谢楼上的各位兄弟,添麻烦了

论坛徽章:
0
8 [报告]
发表于 2009-02-13 22:15 |只看该作者
3楼正解,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP