在Python中,我如何读取存储在数据库中的文件,而不是文件系统,并将其用作Popen的参数?

2024-04-27 22:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用子进程Popen从python运行一个命令。命令有一个参数来指示它将使用的文件的路径。只能通过该参数指定该文件。你知道吗

命令类似于:

command -file /path/to/file

我不能这样做:

cat /path/to/file | command -file

问题是我在数据库中有这个文件,我从python应用程序中读取它。我希望避免将文件临时保存到磁盘并在命令中指定它。你知道吗

有没有办法将内存中的文件作为参数管道传输到Popen?你知道吗

谢谢!你知道吗

编辑: 好的,我应该指定命令和代码,但我当时没有。 我正在尝试使用openssl对证书执行ocsp请求。我知道有一个用于python的openssl模块,但是我想避免额外的python模块。你知道吗

这是python代码:

openssl = '/path/to/openssl'
ossl = subprocess.Popen([openssl, 'ocsp', '-no_cert_verify', '-issuer', 'cacert.cer', '-serial', '0x1234', '-url', url], stdout=PIPE, stderr=PIPE)

我有cacert.cer公司存储在数据库中。无论如何,我还没有看到将管道参数传递给-issuer,我希望有任何方法可以使用子流程管道你知道吗


Tags: 模块文件topath代码命令数据库参数
2条回答

如果是unix,可以使用命名管道。它的工作方式类似于管道,但使用文件系统上的路径。你知道吗

https://docs.python.org/2/library/os.html#os.mkfifo

  1. 使用os.mkfifo()创建fifo
  2. 启动Popen并将fifo路径作为参数传递
  3. 将数据库中的内容写入fifo

不要忘记对打开的fifo文件执行.close(),否则以Popen()开始的进程将永远不知道文件的结尾在哪里。你知道吗

如您所说,如果命令需要一个路径指向文件系统中的一个文件,以便对某些数据进行操作,那么只有一种方法可以为它提供这样的数据:在文件系统中有一个文件。如果该文件还不存在,因为数据在数据库中,而不是在单个文件中,那么通过各种逻辑手段,您必须在调用该命令之前创建该文件。但是请注意,有一些技巧,特别是在兼容POSIX的系统上,可以高效地创建这样的文件。skyjur提到了其中一个技巧。你知道吗

相关问题 更多 >