python: 子进程参数拆分字符串错误
python: subprocess arguments splitting strings wrong
我尝试通过 python 自动获取 pacman 的一些依赖项。
我想在 shell 中发布(并从中获取输出)的是:
pacman -Si [a_package] | grep Conflicts | awk -F: '{print }'
所以这是我的 python 代码:
getconflicts1 = "pacman -Si"
getconflicts2 = "| grep Conflicts | awk -F: '{print }'"
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)
但是 pacman 在我使用 python 程序时说 "invalid option -- F",而在 shell 中直接发出命令就可以了。
这个:
print(getconflicts.split())
给我:
['pacman', '-Si', 'frameworkintegration', '|', 'grep', 'Conflicts', '|', 'awk', '-F:', "'{print", "}'"]
我对 python 和 python 中的子流程有点陌生,所以你有关于如何正确执行此操作的提示吗?
我想我之前已经 运行 了解过这个,除非你使用 shell=True 否则你不能在那里使用管道。我认为原因是 subprocess 没有使用 shell 来启动你的命令,除非你告诉它,所以 |只是作为另一个参数传递给您正在调用的可执行文件。
我尝试通过 python 自动获取 pacman 的一些依赖项。 我想在 shell 中发布(并从中获取输出)的是:
pacman -Si [a_package] | grep Conflicts | awk -F: '{print }'
所以这是我的 python 代码:
getconflicts1 = "pacman -Si"
getconflicts2 = "| grep Conflicts | awk -F: '{print }'"
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)
但是 pacman 在我使用 python 程序时说 "invalid option -- F",而在 shell 中直接发出命令就可以了。
这个:
print(getconflicts.split())
给我:
['pacman', '-Si', 'frameworkintegration', '|', 'grep', 'Conflicts', '|', 'awk', '-F:', "'{print", "}'"]
我对 python 和 python 中的子流程有点陌生,所以你有关于如何正确执行此操作的提示吗?
我想我之前已经 运行 了解过这个,除非你使用 shell=True 否则你不能在那里使用管道。我认为原因是 subprocess 没有使用 shell 来启动你的命令,除非你告诉它,所以 |只是作为另一个参数传递给您正在调用的可执行文件。