簡體   English   中英

Python:內存中的目錄,用於subprocess.call()的當前工作目錄

[英]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的替代方案。)

根據docsgetsyspath是獲取操作系統支持的文件路徑的方法。 但是, MemoryFS不受真實文件系統的支持,並且不會覆蓋fs.base.FS的默認實現,並且會引發NoSysPathError

內存支持的文件系統實現將取決於您的操作系統。 例如,在現代Linux中,您可以安裝一個tmpfs 分區 ,它看起來就像虛擬文件系統中的其他文件夾,但文件將存儲在內存中。 但請注意,如果系統內存不足,則可以將某些tmpfs頁面移動到交換區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM