【问题标题】:What shell does Python's subprocess use?Python的子进程使用什么shell?
【发布时间】:2020-04-22 11:53:40
【问题描述】:

This question and answer 演示了如何使用 Python 的 subprocess 模块与 Python 中的 bash 进行交互。

所以如果subprocess使用系统的默认shell,那么它使用什么shell运行这样的命令:

    import subprocess

    print subprocess.check_output(["ls", "-la"])

【问题讨论】:

  • 在Linux上ls是普通程序-/bin/ls-所以它可以直接发送到系统运行程序。
  • 是的,是什么让您认为 shell 被使用或根本需要?
  • 所以它们是使用 C 标准库对内核的系统调用?
  • 如此处所述:docs.python.org/3/library/… 除非您用shell=True 明确要求一个外壳,否则您不会得到外壳,在这种情况下,在 Linux 上,您会得到 sh,而不是 @987654331 @.
  • @SamMalayek 是的。如果您不使用shell=True,它会使用自己的fork()exec()

标签: python subprocess


【解决方案1】:

【讨论】:

  • 由于他不使用shell=True,所以这个答案并不相关。
  • 对了,谢谢,我主要是好奇Python和如果不是shell就执行的程序之间的软件组件。我开始意识到它一定是 C 系统调用。
  • @SamMalayek np.
  • @SamMalayek, ...我不会真正称它们为“C”系统调用——任何像execlp这样的C标准库包装器最终都会进入一个实际的系统调用,比如execve,您可以在完全不涉及 C 库的情况下调用;因此,用 Go 等语言编写的不使用 libc 的程序能够启动其他程序。
猜你喜欢
  • 2012-06-18
  • 2018-06-09
  • 2012-01-10
  • 1970-01-01
  • 2017-02-09
  • 2017-09-19
  • 2016-05-07
  • 2016-01-04
  • 2014-10-17
相关资源
最近更新 更多