[英]No such file or Directory Error with subprocess.call in Python
[英]Python: directory in memory for current working directory of subprocess.call()
我編寫了一個python腳本,它讀取METAFONT文件,在其上運行METAPOST(生成大約250個PostScript文件),在FontForge中導入這些PostScript文件並輸出OpenType字體。 以下是此腳本的簡化版本:
import os,sys,fontforge,glob,subprocess,tempfile,shutil
if __name__ == "__main__":
mffile = os.path.abspath(sys.argv[1])
tempdir = tempfile.mkdtemp()
font = fontforge.font()
subprocess.call(
['mpost',
'&mfplain',
'\mode=localfont;',
'mag:=100.375;',
'outputtemplate:="%c.eps";',
'input %s;' % mffile,
'bye'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=tempdir)
glyph_files = glob.glob(os.path.join(tempdir, "*.eps"))
for eps in glyph_files:
code = int(os.path.splitext(os.path.basename(eps))[0])
glyph = font.createChar(code)
glyph.importOutlines(eps, ("toobigwarn", "correctdir"))
font.generate("font.otf")
shutil.rmtree(tempdir)
exit(0)
目前,250個PostScript文件存儲在一個臨時目錄中。 為了使事情更快,我希望它們存儲在內存中。 因此,tempdir應該是內存中的目錄。 我已經嘗試過MemoryFS(類似這樣的東西)
from fs.memoryfs import MemoryFS
mem = MemoryFS()
mem.makedir('temdpir')
)但我無法弄清楚如何訪問tempdir中的文件
glyph_files = glob.glob(os.path.join(tempdir, "*.eps"))
作品。
您有如何訪問這些文件的建議嗎? 謝謝。 (也歡迎使用MemoryFS的替代方案。)
根據docs , getsyspath
是獲取操作系統支持的文件路徑的方法。 但是, MemoryFS
不受真實文件系統的支持,並且不會覆蓋fs.base.FS
的默認實現,並且會引發NoSysPathError
。
內存支持的文件系統實現將取決於您的操作系統。 例如,在現代Linux中,您可以安裝一個tmpfs
分區 ,它看起來就像虛擬文件系統中的其他文件夾,但文件將存儲在內存中。 但請注意,如果系統內存不足,則可以將某些tmpfs
頁面移動到交換區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.