Bash“参数扩展”的Python等效/模拟器

时间:2013-03-11 01:35:50

标签: python bash

我有一个bash脚本,用于更新我家中的几台计算机。它利用deborphan程序识别我的系统不再需要的程序(显然是Linux)。

bash脚本使用bash的参数扩展,这使我能够将deborphan的结果传递给我的包管理器(在本例中为aptitude):

aptitude purge $(deborphan --guess-all) -y

deborphan的结果是:

python-pip
python3-all

我想将我的bash脚本转换为python(部分作为学习机会,因为我是python的新手),但是我遇到了一个重大问题。我对python脚本的明显开始是

subprocess.call(["aptitude", "purge", <how do I put the deborphan results here?>, "-y"])

我在上面的subprocess.call中为一个参数尝试了一个单独的subprocess.call,仅用于deborphan,但是失败了。

有趣的是,我似乎无法用以下方式捕获deborphan结果:

deb = subprocess.call(["deborphan", "--guess-all"])

将deborphan的结果作为参数的变量传递。

无论如何都要在python中模拟Bash的参数扩展吗?

1 个答案:

答案 0 :(得分:6)

您可以使用+来连接列表:

import subprocess as sp
deborphan_results = sp.check_output(…)
deborphan_results = deborphan_results.splitlines()
subprocess.call(["aptitude", "purge"] + deborphan_results + ["-y"])

(如果您使用的是2.7以下的Python版本,则可以使用proc = sp.Popen(…, stdout=sp.PIPE); deborphan_results, _ = proc.communicate()