【发布时间】:2017-09-25 06:33:35
【问题描述】:
编辑:我发现问题不在于这段代码,它实际上是一个稍后的简单问题,其行为方式与此处显示的类似。
我正在制作一个对文件执行不同压缩阶段的程序。这部分代码压缩为 ZIP,然后是 DMG,然后将文件重命名为一个扩展名。它在temp/ 目录中执行此操作。
我的代码:
from os import system as sysCmd
from os import rename, remove
import zipfile
...
# STEP 3 - create a zipfile
zip = zipfile.ZipFile(workDir + filename + ".zip", mode='w')
zip.write(workDir + filename + ".datei")
zip.close()
# STEP 4 - Compress to a DMG - THE PROBLEM IS HERE
sysCmd("hdiutil create -fs MS-DOS " + workDir + filename + ".dmg -srcfolder " + workDir + filename + ".zip") # there is no more pythonesque way :(
# STEP 5 - Rename to *.datei
remove(workDir + filename + ".datei") # remove pre-existing datei
rename(workDir + filename + ".dmg", workDir + filename + ".datei")
问题:
它会创建一个 zip temp/myFile.zip,但不会从 zip temp/myFile.dmg 创建一个 DMG。
我当然会收到来自os.rename 的错误,因为该文件不存在:
created: /path/to/files/temp/README.dmg
Traceback (most recent call last):
File "datei.py", line 59, in <module>
rename(workDir + filename + ".dmg", workDir + filename + ".datei")
FileNotFoundError: [Errno 2] No such file or directory: '/path/to/files/temp/README.dmg' -> '/path/to/files/temp/README.datei'
我尝试过的:
- 我自己在命令行运行
hidutil。它成功了!这让我想知道问题是否出在os.system()。 - 正在运行
print(os.system("ls -al " + workDir))。 这告诉我有一个文件whatever.dmg,即使检查其他任何内容都会拒绝它。此外,它告诉我重命名成功,即使它也没有出现在其他任何地方。
非常感谢您的帮助,谢谢。
【问题讨论】:
-
调用外部程序的“pythonesque”方式是使用
subprocess。顺便说一句,您没有检查退出代码。 -
顺便说一句,如果你正在使用的所有文件都在同一个地方,你可以考虑
os.chdir()。