簡體   English   中英

不知道如何修復popen,“無效的文件對象”錯誤

[英]Dont know how to fix popen ,“Invalid file object” error

我正在嘗試獲取文件名,並使用popen將其傳遞給命令。 然后我要打印輸出。 這是我的代碼:

filePath = tkinter.filedialog.askopenfilename(filetypes=[("All files", "*.*")])

fileNameStringForm = (basename(filePath ))
fileNameByteForm = fileNameStringForm.encode(encoding='utf-8')

process = subprocess.Popen(['gagner','-arg1'], shell = True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process .communicate(fileNameByteForm )

stdout, stderr = process .communicate()  <<------ERROR POINTS TO THIS LINE

stringOutput = stdout.decode('urf-8')
print(stringOutput)

我收到以下錯誤:

ValueError: Invalid file object: <_io.BufferedReader name=9>

我看過其他類似的問題,但似乎沒有任何事情可以解決我的問題。 有人可以告訴我代碼中哪里出問題了嗎?

編輯:如果我要在命令行中運行命令,它將是:

gagner -arg1 < file1

您所做的不是您在假定的命令行參數中描述的內容。 您實際上正在執行此操作:

echo "file1" | gagner -arg1

您需要確保自己傳遞文件內容。 Popen將不會打開並為您讀取文件。

根據文檔communicate()作用是

與流程交互:將數據發送到stdin。 從stdout和stderr讀取數據,直到到達文件末尾。 等待進程終止。

所以,一旦你跑了

process.communicate(fileNameByteForm)

您的子流程已完成,管道已關閉。 結果,第二個呼叫將失敗。

您要做的是

stdout, stderr = process.communicate(input_data)

這會將您的輸入數據通過管道傳輸到子進程中,並讀取stdout和stderr。

暫無
暫無

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

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