【问题标题】:How can I delay execution until after os.system finishes?如何延迟执行直到 os.system 完成?
【发布时间】:2011-01-29 13:33:02
【问题描述】:

我正在使用os.system 将文件从一个系统复制到另一个系统。一个非常简单的程序的逻辑是在这个文件被复制后执行另一组命令。

问题在于os.system 实际上并没有等待文件被复制,而是开始执行下一行。这会导致系统出现问题。我实际上可以通过time.sleep() 提供一些等待功能,但是我们必须复制大小从 500 MB 到有时 20 GB 不等的文件,而且所花费的时间非常不同。

解决办法是什么?我需要以某种方式告诉我的程序文件已被复制,然后执行下一行。

【问题讨论】:

  • 请勿使用os.system 复制文件。
  • os.system 会等待命令完成。你用什么命令来复制?
  • “从一个系统到另一个系统”是指通过网络吗?什么协议?还是从一个文件系统到另一个?

标签: python file os.system


【解决方案1】:

我要尝试的第一件事是使用shutil.copyfile() 而不是外部程序来复制文件。如果您必须使用外部程序,您应该通过subprocess.Popen() 调用它,而不是通过os.system()。您可以使用Popen.wait() 等待子进程完成。

【讨论】:

    【解决方案2】:

    我认为您应该使用shutil.copyfile 而不是os.system 来复制文件。

    (编辑:哎呀,复制,不要移动)

    【讨论】:

    • -1 他说“从一个系统到另一个系统”。 shutil 只能在同一个系统上运行。
    • @payne:视情况而定。例如,您可以使用 NFS 或 SSHFS 挂载将项目从一个系统移动到另一个系统。 OP 没有提供太多细节。
    • 技术上是正确的。但在这个阶段,我们都在猜测 OP 的想法。 :-)
    【解决方案3】:

    使用shutil 模块复制文件。

    shutil 模块提供了许多 对文件的高级操作和 文件的集合。尤其, 提供了支持的功能 文件复制和删除。

    另外,使用subprocess 模块代替 os.system()

    子流程模块允许您 产生新的进程,连接到他们的 输入/输出/错误管道,并获得 他们的返回码。这个模块 打算替换其他几个, 较旧的模块和功能,例如:

    操作系统系统

    为了获得更好的答案,您需要提供更多详细信息,说明您究竟想要做什么以及您是如何(以编程方式)卡住的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多