内存中的文件,Python

5
我有一串文本,想要创建一个 .txt 文件。由于安全原因,我不想让用户访问它,因此我想将 .txt 文件存储在内存中(如果可能的话)。
例如: 字符串为:
'''
Username: Bob
Password: Coolness

'''

我想将这个字符串保存为一个.txt文件到内存中,然后把它发送给另一个程序。
anotherprogram.exe mytxt.txt

我四处张望,不知道是否可以使用StringIO来实现这个?它说“将字符串读写为文件”.. 我不确定,请回复如果你知道任何方法。

7
如果其他程序可以通过名称访问该文件,那么用户也可以这样做。另一个程序anotherprogram.exe能够从标准输入读取吗? - Sven Marnach
4个回答

3
如果其他程序可以从标准输入读取数据,那么subprocess可能是一个好的选择。这是一个愚蠢的例子,其中anotherprogram.execat
s='''
Username: Bob
Password: Coolness

'''

from subprocess import Popen,PIPE
p = Popen(['cat','-'], stdin=PIPE, stdout=PIPE)
stdoutdata, _ = p.communicate(s)

许多可以从文件中接受输入的实用程序可以通过将-作为文件名传递来从标准输入读取,但不是所有实用程序都可以这样做。是否可行将在很大程度上取决于anotherprogram.exe的实际情况。


1

如果您不想让其他人访问它,可以使用加密并隐藏密钥,或者使用操作系统提供的用户控制系统。我更喜欢第一种方法。

您可以通过使用RAM磁盘在内存中创建文件,但是以这种方式创建的文件不提供安全性(或者只提供了一点,因为它是易失性的)。有一个名为pyFilesystem的Python模块可以为您完成此操作。

但是据我所知,作为用户,几乎可以访问磁盘上的每个文件,因此很难有效地防止渴望获取文件的用户找到它。

另外,需要找到文件的anotherprogram.exe必须在用户范围内,因此必须以某种方式对用户可访问。


有趣,你知道我怎么能在我的情况下使用pyFilesystem吗?我找不到很多关于如何使用它的例子。 - user1513192
我在http://www.willmcgugan.com/2010/6/20/pyfilesystem-03-released/上找到了一篇博客文章和屏幕录像。希望这能有所帮助。 - jcklie
内存文件系统可能是您最初想到的解决方案,但它并不会增加任何安全性。就像我上面说的,如果其他进程可以通过名称访问该文件,则用户也可以这样做,而不管文件所在的文件系统如何。您是否控制 anotherprogram.exe,即它是否由您编写? 如果是,请使用不同的进程间通信形式。 如果不是,请查看它是否可以从标准输入读取,或者程序接受哪些其他形式的输入。 - Sven Marnach
隐藏系统管理员无法发现的东西并不困难,而是不可能。当然,你可以很好地存储加密数据,但你不能让密钥进入系统,这意味着程序也无法解密数据。如果我们想要保存某些用户数据以防止其他系统用户访问,ACLs 是一个很好的选择,不要重复造轮子。 - Voo

0
为什么不依赖您的操作系统(我猜您使用的是Windows)提供的安全性,使文件仅对某个用户而非所有用户可访问。显然,另一个程序.exe必须作为具有文件读取权限的用户来执行。

0

有一个名为wxpython的模块,其中有一个叫做wx.FileSystem的类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接