繁体   English   中英

从python运行bash命令并捕获文件对象

[英]Run bash command from python and capture file object

在jupyter笔记本中,我可以运行以下命令,然后获取可以打开的文件对象列表:

PATH = someuser/data
files = get_ipython().getoutput('ls {PATH}') #%ls {PATH} in notebook
#then I can run
text = get_ipython().getoutput('less {PATH}{files[0]}')
print(text)

我尝试了以下方法:

path = f"{PATH}"
files = subprocess.call(['ls', path])

files = subprocess.run(['ls', path], stdout=subprocess.PIPE).stdout.decode('utf-8')

files = os.system(path)

但是我只能得到一个字符串对象,而不能得到文件对象,然后我可以打开该对象并从中获取数据。

文件名字符串。 这就是您open以获取文件对象所传递的信息,然后可以从中获取数据。 例如,假设您有一个名为spam.py的脚本:

filename = 'spam.py'
with open(filename) as fileobj:
    data = fileobj.read()
print(data)

运行它时,它会自行打印出来。

现在,您从在ls上调用subprocess.run并读取其stdout不是每个文件的字符串,而是一个大字符串。

这里的简单答案是不调用ls Python已经可以为您获取文件名列表:

filenames = os.listdir(path)
for filename in filenames:
    with open(filename) as fileobj:
        # do stuff with fileobj

但是,如果确实需要,则可以使用例如splitlines方法将您拥有的输出转换为行列表,这与listdir返回的内容listdir相同,只是以更复杂的方式进行检索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM