为什么我的脚本在调用.EXE后停止执行命令?

4 投票
1 回答
853 浏览
提问于 2025-04-16 17:54

这里是一个Python脚本中的相关代码,这段代码执行了一些命令,用来复制一个可执行文件,然后运行它:

exe_file_path = os.getcwd() + r'\name_of_executable.exe'
temp_loc = os.environ['temp']

subprocess.Popen(r'copy %s %s' % (exe_file_path, temp_loc), shell=True)
exe_file_path = os.environ['temp'] + r'\name_of_executable.exe'
subprocess.Popen(r'start %s' % (exe_file_path), shell=True)
subprocess.Popen(r'del %s' % (exe_file_path), shell=True)

目前,name_of_executable.exe 只是打印一些文本,然后调用 system("pause")

在暂停执行后,我按下 enter 键,我本以为这个可执行文件会关闭,Python脚本会继续执行,但最后一行Python代码并没有执行。

这是不是因为我在使用TEMP文件夹?(我是在以管理员身份运行的命令提示符下执行的。怎么才能让这个脚本正常工作呢?

1 个回答

6

所有程序会一个接一个地立即启动。你需要在每个 Popen 对象上调用 communicate 方法,这样可以等程序结束。

另外,你使用格式字符串的方式有点危险。用 ['copy', exe_file_path, temp_loc] 这种方式可以自动处理 exe_file_pathtemp_loc 中的特殊字符,而且看起来也更清晰。

顺便说一下,Python 有很好的函数可以用来复制和删除文件,这些函数在 shutilos 里;所以不需要去调用其他的命令行程序。

而且,确定 exe_file_path 的时候,不要拼接字符串,应该使用 os.path.join 方法(虽然这不是特别重要,因为你的程序似乎只在 Windows 上运行)。

撰写回答