我试图通过python自动化pacman上的一些依赖项。我想在shell中发布(并从中获得输出)的是:
pacman -Si [a_package] | grep Conflicts | awk -F: '{print $2}'
这是我的python代码:
getconflicts1 = "pacman -Si"
getconflicts2 = "| grep Conflicts | awk -F: '{print $2}'"
pkgs = # an example package list
for x in range (1,2):
getconflicts = getconflicts1 + pkgs[x] + getconflicts2
process2 = subprocess.Popen(getconflicts.split(), stdout=subprocess.PIPE)
conflicts = process2.communicate()[0]
print(conflicts)
然而,当我使用python程序时,pacman会说"无效选项--F",而在shell中直接发出命令是有效的。
此:
print(getconflicts.split())
给我:
['pacman', '-Si', 'frameworkintegration', '|', 'grep', 'Conflicts', '|', 'awk', '-F:', "'{print", "$2}'"]
我对python和python中的子流程有点陌生,所以你有关于如何正确执行的提示吗?
我想我以前遇到过这种情况,除非你使用shell=True,否则你不能在那里使用管道。我认为原因是,除非你告诉子进程,否则它不会使用shell来启动你的命令,所以|只是作为另一个参数传递给你正在调用的可执行文件。