我想在 Python 3 中运行以下 bash 命令:
ls -l
我知道我可以做到以下几点:
from subprocess import call
call(['ls', '-l'])
如何将此输出保存到文件,或将其放入列表或集合中?
[-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.
我希望能够直接访问特定信息,然后将其添加到集合中,但我不知道会列出多少项。
任何提示、片段或示例都会很有帮助。
>= python3.5 你可以使用 subprocess.run:
ls_lines = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE).stdout.splitlines()
对于 >= python2.7 或 >= python3.0,您可以使用 subprocess.check_output:
ls_lines = subprocess.check_output(['ls', '-l']).splitlines()
python2.7之前,需要使用较低级别的api,涉及的有点多。
ls_proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
ls_proc.wait()
# check return code
ls_lines = ls_proc.stdout.readlines()
访问
ls -l
输出中的信息的一种方法是解析它。例如,csv.DictReader
可用于将每一列映射到字典中的字段:
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)
上面的代码将为
ls -l
输出中的每一行打印一个字典,例如:
{'group': '<group_name>',
'name': '<filename>',
'links': '1',
'date': '<modified_date>',
'time': '<modified_time>',
'owner': '<user_name>',
'permissions': '-rw-rw-r--',
'size': '<size>'}
如果您真正想要的是列出目录,请使用 os.listdir
import os
files = os.listdir('/path/to/dir')
for file in files:
print(file)
了解 Popen。您所要求的套装
import subprocess
proc = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
myset=set(proc.stdout)
或者做类似的事情
for x in proc.stdout : print x
对于 stderr 也是如此
您可以使用
检查进程的状态proc.poll()
或者等待它终止
proc.wait()
还读过
from subprocess import Popen, PIPE
output = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
然后您可以对输出执行任何您想要的操作。请参阅python 文档了解详细文档
人们已经对此做出了回应。尽管如此,以防万一有人需要它
import subprocess
output_list=subprocess.check_output(['locate','*.nse']).decode('utf-8').split('\n')[:-1]