2017-08-07 71 views
1

我在當前目錄中創建了一個文件,其中包含echo "foo" > foo。然後我試圖將該文件傳遞給subprocess.run,但我似乎誤解了Python中處理文件路徑的方式,因爲我收到錯誤。怎麼了?無法將文件句柄傳遞給子流程

我的測試代碼

with open('foo') as file: 
    import subprocess 
    subprocess.run(['cat',file]) 

產生

TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper 

什麼是PathLike對象?如何從open('foo')得到它?我在哪裏可以找到關於如何在Python中處理文件的更多信息?

+0

它需要一個*類似字符串的*或'PathLike'對象。只要通過''foo''。無論如何,你爲什麼要打開文件? –

+0

與「路徑像」相反,有所謂的[「文件像」對象](https://docs.python.org/3/glossary.html#term-file-object)(就像你試圖傳遞的那個到'subprocess.run()')。簡而言之,這些文件句柄允許您使用'read()'和'write()'等方法對Python *內部的文件(或流,一般來說)*進行操作。 –

回答

2

沒有必要首先打開文件。你可以簡單地運行

import subprocess 
subprocess.run(['cat', 'foo']) 

cat命令正在運行,通過你的機器一個shell命令,所以你應該只能夠通過文件名作爲一個字符串。

Python根本不處理該文件。子進程的意義在於將命令傳遞給底層系統(在這種情況下,顯然是基於UNIX的操作系統)。您所做的只是將明文命令傳遞給命令行。

但是,我不會阻止您閱讀有關文件處理的內容。看看this文檔。

相關問題