Skip to content Skip to main navigation Skip to footer

Python:如何运行外部的linux/unix命令/程序

我们在写python程序的时候,有时候需要调用现成的外部命令或者已经编译好的外部程序, 那么在python里如何调用呢?

下面来介绍一个python的模块:subprocess. 这个模块可以创建一个新的进程,并可以获取到该进程的标准输入/输出以及标准的错误输出, 而且可以该进程最后的返回值。当然python里还有其它的模块可以实现这种需求,比如:os.system, os.spawn*, os.popen*.

python subprocess模块的用法

import subprocess
subprocess.call("命令“)
subprocess.call(["命令”,“参数”])

python程序中执行ifconfig命令去获取系统网卡的信息

#!/usr/bin/python
import subprocess
subprocess.call("ifconfig")

程序执行后输出如下:

eth0      Link encap:Ethernet  HWaddr
          inet addr:10.10.10.200  Bcast:10.10.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:62621520 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43688 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2787090014 (2.5 GiB)  TX bytes:1835004 (1.7 MiB)
          Interrupt:164 

python程序调用netstat -l命令查看正在监听的端口

#!/usr/bin/python
import subprocess
subprocess.call(["netstat","-l"])

程序执行后输出如下:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:mysql                     *:*                         LISTEN
tcp        0      0 *:http                      *:*                         LISTEN
tcp        0      0 *:ftp                       *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN

如何将外部命令的输出传给python的一个变量呢?我们可以使用subprocess中的Popen类来实现

#!/usr/bin/python
import subprocess
Temp=subprocess.Popen(["netstat","-l"], stdout=subprocess.PIPE, shell=True)
(output,errput)=Temp.communicate()
return_value=Temp.wait()
print "命令输出:“,output
print "命令退出状态:“, return_value

0 Comments

There are no comments yet

Leave a comment

Your email address will not be published.