编程语言
首页 > 编程语言> > python – 为什么我们必须在subprocess.Popen中使用列表?

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

作者:互联网

我的问题更具理论性而非实际性,我找到了更多的答案,解释了我们为什么要在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

可能是execve和子进程使用的列表模型有些相关,但任何人都可以给出一个很好的解释吗?

提前致谢.

解决方法:

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

您可以使用字符串而不是shell = True的列表;然后shell负责将命令行解析为* char []数组.然而,外壳增加了许多讨厌的复杂性;有关详细说明,请参阅why you want to avoid shell=True的许多问题.

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

标签:execve,python,subprocess
来源: https://codeday.me/bug/20190824/1705371.html