在python中,如何读取存储在数据库中的文件而不是文件系统,并将其用作Popen上的参数
我正在使用子进程Popen从python运行一个命令。命令有一个参数,用于指示它将使用的文件的路径。只能通过该参数指定该文件 该命令类似于:在python中,如何读取存储在数据库中的文件而不是文件系统,并将其用作Popen上的参数,python,Python,我正在使用子进程Popen从python运行一个命令。命令有一个参数,用于指示它将使用的文件的路径。只能通过该参数指定该文件 该命令类似于: command -file /path/to/file cat /path/to/file | command -file 我不能这样做: command -file /path/to/file cat /path/to/file | command -file 问题是我在数据库中有这个文件,我从python应用程序中读取它。我希望避免将文件临时保
command -file /path/to/file
cat /path/to/file | command -file
我不能这样做:
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,我希望有任何方法可以使用subprocess.pipe以某种方式将其管道化。如果是unix,则可以使用命名管道。它的工作原理类似于管道,但使用文件系统上的路径
os.mkfifo()创建fifo
不要忘记对打开的fifo文件执行
.close()
,否则从Popen()
开始的进程将永远不知道文件的结尾在哪里。如果命令,如您所说,需要文件系统中的文件路径,以便对某些数据进行操作,那么,只有一种方法可以为它提供这样的数据:在文件系统中拥有一个文件。如果该文件还不存在,因为数据在数据库中而不是在单个文件中,那么从逻辑上讲,您必须在调用该命令之前创建该文件。但是,请注意,有一些技巧,特别是在兼容POSIX的系统上,可以高效地创建这样的文件。skyjur提到了其中一个技巧。我不太清楚。您想在数据库中读取一个文件,并在python代码中使用这些参数吗?也许发布实际代码会有所帮助。您确定命令只按顺序读取文件一次吗?如果它对文件进行多次扫描或尝试查找,您可能需要创建一个临时文件。我编辑了这篇文章以使其更清晰。@Karl:我们有帮助吗?请注意,只有当程序只读取一次文件时,这种方法才会起作用。如果它执行两次文件传递,或者尝试在其中查找,这将不起作用!