【问题标题】:Py3 shutil.make_archive command runs before subprocess.PopenPy3 shutil.make_archive 命令在 subprocess.Popen 之前运行
【发布时间】:2023-03-08 22:00:01
【问题描述】:

我想下载一个文件然后压缩它。在我的代码中,我有一个子进程命令来下载文件,然后我有一个 shutil 命令来压缩它。但是在执行时,shutil 命令首先运行。

注意:“MyDownloadScript.pl”是下载所需文件的 Perl 脚本。为了完成这个任务,我必须下载这个脚本。

subprocess.Popen(['perl', 'C:\\gitrepo\\BuildScripts\\MyDownloadScript.pl', '-branch', 'BranchName'])
    
    

shutil.make_archive(('{}\\OutputZIP'.format('outputPath'), 'zip', 'C:\\startingFolder', 'startingFile.dmg')
    

尽管代码中函数的顺序不同,但 shutil 命令总是首先运行。以下是我在不同场景中运行脚本时发生的情况:

1) 如果不存在文件:

  • 脚本抱怨找不到 .dmg 文件
  • .dmg 文件下载后
  • 未生成 ZIP

2)如果我之后再次运行脚本(当 .dmg 存在时)

  • ZIP 文件是从 .dmg 创建的
  • .dmg 已重新下载

为什么这些函数运行起来似乎是乱序的?任何想法/建议将不胜感激。

【问题讨论】:

    标签: python-3.x subprocess shutil


    【解决方案1】:

    subprocess.Popen() 是非阻塞的。因此它会产生一个进程并立即转到脚本的下一行。改用subprocess.call()

    subprocess.call(['perl', 'C:\gitrepo\BuildScripts\MyDownloadScript.pl', '-branch', 'BranchName'])
    
    
    
    shutil.make_archive(('{}\OutputZIP'.format('outputPath'), 'zip', 'C:\startingFolder', 'startingFile.dmg')
    

    【讨论】: