python中怎么运行shell脚本

Python07

python中怎么运行shell脚本,第1张

python中怎么运行shell脚本

system()

其中最后一个0是这个命令的返回值,为0表示命令执行成功。使用system无法将执行的结果保存起来。

popen()

获取命令执行的结果,但是没有命令的执行状态,这样可以将获取的结果保存起来放到pst中。

commands

可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位。

commands.getoutput('ls')这个方法只返回执行结果result不返回状态。

在python中调用shell脚本

hello.sh

下面的512是返回的状态码,如果eixt 0时则返回的是0.

shell脚本使用python脚本的参数

写一个hello.sh脚本,需要传入两个参数:

执行结果如下:

在python脚本中调用shell脚本,并传入参数,注意参数前后要有空格

执行python脚本

相关推荐:《Python教程》以上就是小编分享的关于python中怎么运行shell脚本的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!

Python 中执行 Shell 命令有多种方法,stackoverflow 上有对这些方法进行比较的讨论,Calling an external command in Python 指出使用subprocess模块来实现更优。因此,本文说明如何使用subprocess模块来实现 Shell 脚本的功能。

subprocess模块提供多种方法来实现执行 Linux 的命令,例如subprocess.call()方法,subprocess.check_call()方法,等。这些方法都是对Popen类的封装,故本文着重讲述Popen类的使用。

执行 Shell 命令

可以通过向Popen()传递需要执行的命令来创建一个Popen对象,这样,便会创建一个子进程来执行命令。例如:

child = subprocess.Popen(["ping","-c","5","leehao.me"])

1

上面的代码会创建一个子进程来执行ping -c 5 leehao.me命令,这个命令采用列表的形式传递给Popen()方法。如果我们想直接采用ping -c 5 leehao.me字符串形式,可以添加shell=True来实现:

child = subprocess.Popen("ping -c 5 leehao.me", shell=True)

1

官方文档指出由于安全原因故不建议使用shell=True,详细说明可以参考官方文档的描述。

等待子进程执行

子进程执行命令后,主进程并不会等待子进程执行。为了让主进程等待子进程执行结束,需要显示调用Popen.wait()方法。例如:

child = subprocess.Popen(["ping","-c","5","leehao.me"])

child.wait()

print 'parent finish'

1

2

3

这样,主进程会等待子进程执行ping命令完毕后,才会打印出parent finish的输出。

获取执行结果

为了获取Popen()子进程的输出,可以使用Popen.communicate()方法,例如:

def subprocess_cmd(command):

process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)

proc_stdout = process.communicate()[0].strip()

print proc_stdout

subprocess_cmd('echo leehao.meecho www.leehao.me')

1

2

3

4

5

6

输出:

leehao.me

www.leehao.me

process.communicate()方法可以实现主进程与子进程的通信。主进程可以通过它向子进程发送数据,也可以读取子进程的输出的数据。上面的例子中,我们在创建Popen对象时指定stdout=subprocess.PIPE,这样主进程便可以读取子进程的输出。

communicate()方法返回一个元组:(stdoutdata, stderrdata),process.communicate()[0]即获取子进程的标准输出。

需要指出的是,调用communicate()方法后,主进程也会等待子进程执行完毕。

上面的例子中,子进程向标准输出打印两个字符串,主进程接收到了这些输出,并打印出来。