从Python文件运行多个终端命令

从Python文件运行多个终端命令,python,linux,macos,terminal,Python,Linux,Macos,Terminal,因此,我一直在我的MacOS上胡闹,试图从Python文件中运行Terminal命令。以下是我到目前为止一直在使用的代码: #!/usr/bin/env python3 import os import subprocess print("IP Configuration for Machine") cmd = ['ifconfig'] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subproces

因此,我一直在我的MacOS上胡闹,试图从Python文件中运行Terminal命令。以下是我到目前为止一直在使用的代码:

#!/usr/bin/env python3
import os
import subprocess

print("IP Configuration for Machine")
cmd = ['ifconfig']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

o, e = proc.communicate()
print('OUTPUT: ' + o.decode('ascii'))
print('ERROR: '  + e.decode('ascii'))
print('CODE: ' + str(proc.returncode))
当我打算只运行一个终端命令时,它工作得非常好。现在我打算运行多个一个,但到目前为止,它给了我错误。我尝试的一个例子:

print("IP Configuration for Machine & List Directory")
cmd = ['ifconfig', 'ls']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

我想知道是否有办法解决我的困境

Popen的参数是要执行的一个命令的名称。要运行混响,请运行多个子进程(或者运行一个运行多个子进程的子进程,例如一个shell)

顺便说一句,如果您只需要运行一个进程并等待它完成,那么可能要避免裸
Popen

['ifconfig','ls']中cmd的
:
p=subprocess.run(cmd,capture\u output=True,check=True,text=True)
打印('输出:',p.stdout)
打印('错误:',p.stderr)
打印('结果代码:',p.returncode)


但通常

Popen
采用一个命令及其参数的名称,而不是按顺序运行两个单独的命令。您需要使用
subprocess.Popen
两次,一次用于
cmd
的每个元素。
p = subprocess.run('ifconfig; ls', shell=True, check=True, capture_output=True, text=True)
print(p.stdout, p.stderr, p.returncode)