为什么代码不是在python for循环中串行执行的

时间:2011-10-24 18:33:42

标签: python

我在python脚本中有以下功能:

invoke the shell to create some files(it is a split command from the shell)
for f in a folder
    open f and write something

commands..

我已经看到,当执行for循环后程序进入命令时,许多文件没有被正确更改。有些是,有些则没有,是随机的。

实际上在循环之前,使用popen.subprocess调用的shell命令创建文件。发生的事情是,当popen.subprocess没有被终止时,有些for循环被执行。如果shell命令终止,我怎么能强制程序启动for循环?

2 个答案:

答案 0 :(得分:0)

如果您没有刷新或关闭文件,可能还没有写出来。垃圾收集将隐式关闭文件对象,但对于您的用例可能不会很快发生。

for f in files:
    out = open(f)
    out.write(something)
    out.close()

do_more.stuff()

这可以用

更简洁地表达
for f in files:
    with open(f) as out:
        out.write(something)

do_more.stuff()

以便在离开with块时隐式完成关闭。

答案 1 :(得分:0)

我想出了这个:

pid=subprocess.Popen(...)//invoke the shell command which creates a bunch of files
pid.wait()//wait until terminates
for f in a folder
     open f and write something
commands..

这解决了我的问题