I want to run the following bash command in Python 3:
ls -l
I know that I can do the following:
from subprocess import call
call(['ls', '-l'])
How do I save this output to a file, or put it into lists or sets?
[-rw-r--r--] [1] [name] [staff] [426] [14 Jan 21:52] [HelloWorld.class]
[-rw-r--r--@] [1] [name] [staff] [107] [14 Jan 21:51] [HelloWorld.java]
...
etc.
I want to be able to access particular information directly, and then add it to the set, but I do not know how many items will be listed.
Any hints, snippets, or examples would really help.
One way to access to the information in ls -l
output is to parse it. For example, csv.DictReader
could be use to map each column to a field in a dictionary:
import subprocess
import csv
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
reader = csv.DictReader(stdout.decode('ascii').splitlines(),
delimiter=' ', skipinitialspace=True,
fieldnames=['permissions', 'links',
'owner', 'group', 'size',
'date', 'time', 'name'])
for row in reader:
print(row)
The code above will print a dictionary for each line in ls -l
output such as:
{'group': '<group_name>',
'name': '<filename>',
'links': '1',
'date': '<modified_date>',
'time': '<modified_time>',
'owner': '<user_name>',
'permissions': '-rw-rw-r--',
'size': '<size>'}