3 回答

TA貢獻2012條經驗 獲得超12個贊
如果您堅持使用子流程,請嘗試:
[x.split(' ')[-1] for x in stdout.decode().split('\n')[1:-1]]
顯然,這是一種非常“hacky”的方式。相反,我可以建議標準庫glob
import glob
glob.glob(source + '/*')
返回源中所有文件/目錄名稱的列表。
編輯:
cmd = ["ls", source]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
stdout, stderr = proc.communicate()
exitcode = proc.returncode
stdout.decode("utf-8").split('\n')[:-1]
也應該這樣做。-l這里不需要選項。

TA貢獻1810條經驗 獲得超4個贊
由于幾個原因,解析 的輸出ls是一個壞主意。如果您的文件名有尾隨空格,ls則將其顯示為'trailing space ',如果您嘗試將open("'trailing space '")其顯示為無效。文件名也可以包含換行符。
使用pathlib來代替:
from pathlib import Path
source = Path("/path/to/some/directory")
[x.name for x in source.iterdir()]
# ['a_file', 'some_other_file.txt', 'a_directory']

TA貢獻1863條經驗 獲得超2個贊
正如查爾斯·達菲 (Charles Duffy) 所提到的,您可以使用 os. 像這樣。
import os
directory=#wherever you want to search
files_and_directories=os.listdir(directory)
Out: ['Directories and file names in a list']
添加回答
舉報