【问题标题】:Capture result of bash script into a Python program将 bash 脚本的结果捕获到 Python 程序中
【发布时间】:2019-05-16 12:16:20
【问题描述】:

我有兴趣使用在名称 list_of_dirs_in_bash 下在 bash 脚本中创建的目录列表,并将其传递给我的 Python 通用程序中的列表。

所以,在我的 Python 脚本中做了之后:

subprocess.call("my_bash_script.sh")

做一些类似的事情:

list_of_dirs_in_python = list_of_dirs_in_bash

然后我可以在 Python 中使用该列表。当然这并不难,但我发现的一切都是相反的(从 Python 到 bash)。谢谢。

【问题讨论】:

  • 不太清楚你想得到什么。你有没有尝试过?
  • 而不是subprocess.call,尝试将subprocess.run 用作documented here。将 stdout=subprocess.PIPE 作为 arg 传递,然后使用返回的 CompletedProcess 访问 bash 脚本的输出。

标签: python bash subprocess


【解决方案1】:

[Python 3.Docs]: subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, cwd=None, encoding=None, errors=None, universal_newlines=None, timeout=None, text=None) 是此任务所需的(最简单的变体),因为它将返回进程的stdout
从那里,解码并拆分返回值(字符串)以获得单独的行。

示例(从命令行完成所有操作):

[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow]> ls
a.py        q049058700  q049654022  q051914879  q052090348  q053230645  q053781370  q054269984  q055357490  q056055568
q038171543  q049499683  q051073129  q052051111  q052720961  q053626481  q054243176  q054306561  q055537728  sizes_mingwi686.exe
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow]>
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow]> python3 -c "import subprocess;list_of_dirs_in_bash = subprocess.check_output(['ls']).decode().split('\n');print(list_of_dirs_in_bash)"
['a.py', 'q038171543', 'q049058700', 'q049499683', 'q049654022', 'q051073129', 'q051914879', 'q052051111', 'q052090348', 'q052720961', 'q053230645', 'q053626481', 'q053781370', 'q054243176', 'q054269984', 'q054306561', 'q055357490', 'q055537728', 'q056055568', 'sizes_mingwi686.exe', '']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 2015-06-02
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多