gpt4 book ai didi

python - 为什么我们必须在 subprocess.Popen 中使用列表?

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:11 25 4
gpt4 key购买 nike

我的问题比实际更理论化,我找到了更多解释如何但不是为什么我们应该在 subprocess.Popen 中使用列表的答案 调用。

例如已知的:

Python 2.7.10 (default, Oct 14 2015, 16:09:02)
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> cmd = subprocess.Popen(["python", "-V"], stdout=subprocess.PIPE)
Python 2.7.10

然后在UNIX里瞎折腾,发现了一个有趣的东西:

mvarge@ubuntu:~$ strace -f python -V 2>&1
execve("/usr/bin/python", ["python", "-V"], [/* 29 vars */]) = 0

可能 execvesubprocess 使用的列表模型在某种程度上是相关的,但是谁能对此给出一个很好的解释?

提前致谢。

最佳答案

底层的 C 级表示是一个 *char [] 数组。在 Python 中将其表示为列表只是一种非常自然和透明的映射。

您可以使用字符串而不是列表,shell=True;然后 shell 负责将命令行解析为 * char [] 数组。但是,shell 增加了许多讨厌的复杂性;查看关于 why you want to avoid shell=True 的许多问题以获得详细的解释。

command line arguments argv and the environment envp只是许多操作系统级结构中的两个,这些结构本质上是一个以 null 结尾的字符串数组。

关于python - 为什么我们必须在 subprocess.Popen 中使用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com