亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅列出子進程 ls -l 中的文件和目錄名稱

僅列出子進程 ls -l 中的文件和目錄名稱

瀟瀟雨雨 2022-01-05 12:16:25
在使用 Popen 或 check_output 的 python 子進程中,我需要列出給定源目錄中的文件和目錄。但我只能使用命令ls -l。示例代碼cmd = ["ls", "-l", source]proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)stdout, stderr = proc.communicate()exitcode = proc.returncodeif exitcode != 0:    raise SystemError("Exitcode '{}', stderr: '{}', stdout: '{}'  for command: '{}'".format(        exitcode, stderr, stdout, cmd))從上面proc,通過使用 grep 或任何其他方式,我可以只獲取源目錄中的文件和目錄名稱列表而沒有其他信息嗎?
查看完整描述

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這里不需要選項。


查看完整回答
反對 回復 2022-01-05
?
慕萊塢森

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']


查看完整回答
反對 回復 2022-01-05
?
小唯快跑啊

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']


查看完整回答
反對 回復 2022-01-05
  • 3 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號