Python3如何不写入物理文件将字符串转为文件路径供应用传参
Python3 无物理落盘传递字符串作为文件路径参数实现方案
核心逻辑:要求传入文件路径的外部程序,本质是通过系统调用读取对应路径的文件内容,你可以通过内核提供的内存态虚拟文件机制,完全不把字符串写入物理磁盘就满足参数要求。
类Unix系统(Linux/macOS)最优方案:匿名管道+proc虚拟路径
这个方案完全不会产生任何磁盘文件,内容全程在内存管道中流转,内核直接对外暴露虚拟文件路径供外部程序读取,代码如下:
import os import subprocess tokenStr = get_token(some_arguments) # 创建匿名管道,拿到读端、写端文件描述符 r_fd, w_fd = os.pipe() try: # 把token字符串写入管道 os.write(w_fd, tokenStr.encode("utf-8")) # 写完立刻关闭写端,避免外部程序读文件时阻塞 os.close(w_fd) # 构造内核提供的虚拟文件路径,该路径不对应任何物理磁盘文件 virtual_token_path = f"/proc/self/fd/{r_fd}" # 调用目标程序,推荐用subprocess代替os.system,避免shell注入风险 subprocess.run( ["myapplication", "--tokenFile", virtual_token_path], check=True, close_fds=False # 保证子进程可以继承管道读端的文件描述符 ) finally: # 回收关闭读端文件描述符 os.close(r_fd)
- 如果你坚持要用
os.system调用(不推荐,存在命令注入风险),替换subprocess调用部分即可:
os.system(f"myapplication --tokenFile {virtual_token_path}")
兼容性兜底方案:内存盘临时文件
如果目标程序校验文件类型,不支持读取管道类虚拟文件,可以用系统自带的内存盘存放临时文件,内容不会写入物理磁盘持久化,系统重启后自动清除,兼容性和普通文件完全一致:
import os import tempfile tokenStr = get_token(some_arguments) # Linux系统内存盘默认挂载在/dev/shm,macOS可自行创建内存盘后替换dir参数 with tempfile.NamedTemporaryFile(mode="w", dir="/dev/shm", delete=True) as tmp_f: tmp_f.write(tokenStr) tmp_f.flush() os.system(f"myapplication --tokenFile {tmp_f.name}")
注意事项
- 管道方案仅支持类Unix系统,Windows环境没有proc虚拟文件系统,需要调用Win32API创建命名管道实现类似效果,且要求目标程序支持读取命名管道路径。
- 不要直接用默认的
tempfile.NamedTemporaryFile,默认临时目录在物理磁盘上,会产生实际的磁盘写入,不符合需求。
内容的提问来源于stack exchange,提问作者skk6
相关产品推荐
相关产品推荐

