【问题标题】:Python - execution order (file writing and reading)Python - 执行顺序(文件写入和读取)
【发布时间】:2013-02-01 01:47:29
【问题描述】:

这些线条有什么原因吗

out = open("tmp.gp",'w')
out.write('plot sin(x)')
out.close
system('gnuplot -persist tmp.gp')

不起作用,但这些(如下)可以吗?

system('gnuplot -persist tmp.gp')
out = open("tmp.gp",'w')
out.write('plot sin(x)')
out.close

请注意,我不会在程序期间删除 tmp.gp,因此在任何一种情况下,文件都存在并且在执行任何这些行之前包含命令“plot sin(x)”(因为该文件存在于上一次运行)?

我唯一的猜测是这可能是一种竞争条件,但使用 raw_input() 来消磨时间并没有帮助(见下文)。感谢您的帮助!

out = open("tmp.gp",'w')
out.write('plot sin(x)')
out.close
raw_input()
system('gnuplot -persist tmp.gp')

【问题讨论】:

  • 首先,您是在打电话给out.close(),还是在打电话给out.close?后者什么都不做。
  • 请注意,依赖上一次运行的数据似乎很奇怪且令人困惑——这在上下文中可能是有意义的,如果是这样,那很好,但否则,它对用户非常不友好。
  • @mmgp - 很棒的收获。我觉得自己没有看到这一点很愚蠢。
  • @Lattyware - 这是一个糟糕的设计,是的。我是用它来调试的。

标签: python operating-system system


【解决方案1】:

因为你实际上并没有调用close函数,把out.close改成out.close()。函数调用需要() 才能被调用。

【讨论】:

  • 它实际上一种竞争条件,因为他依赖outgnuplot 运行之前进行垃圾收集,这在理论上是可能的,但可能会失败。 (当然,几乎总是失败,但这并不意味着它不是一场比赛,只是它比大多数比赛更容易调试。)
  • 请注意,这是您应该使用with 语句的另一个原因!它使这种错误不可能发生。
【解决方案2】:

正如其他人提到的,您没有正确使用 close()。还可以处理您应该与 statment 一起使用的文件:

with open("tmp.gp",'w') as out:
    out.write('plot sin(x)')
    out.close()

这样即使你自己不关闭文件或写入文件会引发错误,文件仍然会被关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2020-12-25
    • 2018-05-08
    • 2012-11-12
    相关资源
    最近更新 更多