编辑:--我发现这个问题不是这个代码的问题,它实际上是一个简单的问题,其作用方式与这里显示的类似。
我正在制作一个程序,对一个文件执行不同的压缩阶段。这部分代码压缩到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 --这告诉我有一个文件,尽管与其他任何检查都否认它。另外,它告诉我重命名成功了,尽管它在其他地方也没有出现。我们会非常感谢你的帮助,谢谢。
发布于 2017-09-26 19:56:47
您可能对文件的创建位置、文件的名称等等有一些混淆。例如,如果您的路径有空格,命令行将被错误地解释‘,因为您不对shell进行任何引用或转义。
在Python中使用外部命令的一个可靠方法是使用 module并自己构造argv,因为您通常不需要shell干扰。始终检查程序的退出代码。
import subprocess
subprocess.check_call(("hdiutil","create",
"-fs","MS-DOS",
os.path.join(workDir, filename + ".dmg"),
"-srcfolder", os.path.join(workDir, filename + ".zip")))
assert os.path.isfile(os.path.join(workDir, filename + ".dmg"))https://stackoverflow.com/questions/46398922
复制相似问题