簡體   English   中英

從python運行命令行並從內存管道參數

[英]Running a command line from python and piping arguments from memory

我想知道是否有辦法在python中運行命令行可執行文件,但是從內存中傳遞參數值,而不必將內存數據寫入磁盤上的臨時文件。 從我所看到的,似乎subprocess.Popen(args)是從python腳本中運行程序的首選方式。

例如,我在內存中有一個pdf文件。 我想使用大多數Linux發行版中的命令行函數pdftotext將其轉換為文本。 但我不希望將內存中的pdf文件寫入磁盤上的臨時文件。

pdfInMemory = myPdfReader.read()
convertedText = subprocess.<method>(['pdftotext', ??]) <- what is the value of ??

我應該調用的方法是什么?如何將內存數據輸入其第一個輸入並將其輸出傳輸回內存中的另一個變量?

我猜測還有其他pdf模塊可以在內存中進行轉換,有關這些模塊的信息會有所幫助。 但是為了將來參考,我也對如何從python內部管道輸入和輸出到命令行感興趣。

任何幫助將非常感激。

Popen.communicate

import subprocess
out, err = subprocess.Popen(["pdftotext", "-", "-"], stdout=subprocess.PIPE).communicate(pdf_data)

如果你需要一個可尋找的東西, os.tmpfile很有用。 它使用一個文件,但它幾乎像管道方法一樣簡單,不需要清理。

tf=os.tmpfile()
tf.write(...)
tf.seek(0)
subprocess.Popen(  ...    , stdin = tf)

這可能不適用於Posix受損的操作系統'Windows'。

來自子進程的Popen.communicate接受一個用於將數據發送到stdin的輸入參數,您可以使用它來輸入您的數據。 您還可以通過communicate獲得程序的輸出,因此您無需將其寫入文件。

用於通信的文檔明確警告所有內容都緩存在內存中,這似乎正是您想要實現的內容。

暫無
暫無

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

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