如何打开一个新的外壳并在其上运行命令?

时间:2020-09-13 14:07:14

标签: python bash

我想运行一个打开新外壳并在其上运行以下命令的代码。

我尝试了这些行:

cmd_line = "env > help.txt"
subprocess.Popen(cmd_line, shell=True, stdout=subprocess.PIPE,
                 stderr=subprocess.STDOUT)

但是它没有打开新的外壳。

1 个答案:

答案 0 :(得分:0)

Popen方法不会产生外壳程序的新实例。从文档中:

在新进程中执行子程序。在POSIX上,该类使用类似于os.execvp()的行为来执行子程序。在Windows上,该类使用Windows CreateProcess()函数。 Popen的参数如下。

shell关键字参数不会为您打开新的Shell,而是在关闭之前在后台的新Shell中运行该进程。默认情况下,她是sh

在shell = True的POSIX上,shell默认为/ bin / sh。如果args是字符串,则该字符串指定要通过外壳执行的命令。这意味着该字符串的格式必须与在shell提示符下键入时的格式完全相同。例如,这包括在文件名中使用引号或反斜杠转义。如果args是序列,则第一项指定命令字符串,任何其他项都将被视为shell本身的其他参数。也就是说,Popen等效于:Popen(['/bin/sh', '-c', args[0], args[1], ...])

在内部,python正在“打开”一个新的shell,但它隐藏在后台,并且从未向用户明确显示。 如果您想打开一个新的外壳供用户与之交互,则需要运行该外壳并等待其终止。

child_shell = Popen("/usr/bin/sh")

child_shell.wait()