[英]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.