我有一个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的参数扩展吗?
答案 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()
)