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

标签 python linux jupyter-notebook

在 jupyter notebook 中,我可以运行以下命令并获取我可以打开的文件对象列表:

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 返回,只是以更复杂的方式检索。

关于python - 从 python 运行 bash 命令并捕获文件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311270/

相关文章:

python - pandas dataframe : groupby, 应用函数返回数组并映射回结果

linux - phantomjs 2.0 在 Linux 上内存使用率高

linux - 使用 sed 从日志文件中提取目录

python - Pyspark - 将 json 字符串转换为 DataFrame

python - CLI 似乎忽略了我的功能并转到另一个! (Python)

python - 在 Python 中结合 SimpleXMLRPCServer 和 BaseHTTPRequestHandler

Ubuntu 上的 python 卸载出错,apt-get 和 dpkg 损坏错误消息 1

linux - 如何使用 Bash 获取仅包含一组字母的行?

version-control - 在版本控制下使用 IPython 笔记本

python - 属性错误 : 'API' object has no attribute 'followers_ids'