1. os 模块
1.1. os模块的exec方法族
Python的exec系统方法同Unix的exec系统调用是一致的。这些方法适用
于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。( 这个看了点 help(os) --> search
"exec" 的相关介绍,但是没太搞明白咋使用)
1.2. os模块的system方法
system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。
[python]
view plain
>>> import os
>>> os.system("echo \"Hello World\"") # 直接使用os.system调用一个echo命令
Hello World ——————> 打印命令结果
0 ——————> What's this ? 返回值?
>>> val = os.system("ls -al | grep \"log\" ") # 使用val接收返回值
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log ——————> 此时只打印了命令结果
>>> print val
0 ——————> 注意,此时命令正常运行时,返回值是0
>>> val = os.system("ls -al | grep \"log1\" ")
>>> print val
256 ——————> 使用os.system调用一个没有返回结果的命令,返回值为256~
>>>
注意:上面说了,此方法脂肪会外部程序的结果,也就是os.system的结果,所以如果你想接收命令的返回值,接着向下看~
1.3. os模块的popen方法
当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()
[python]
view plain
>>> os.popen('ls -lt') # 调用os.popen(cmd)并不能得到我们想要的结果
<open file 'ls -lt ', mode 'r' at 0xb7585ee8>
>>> print os.popen('ls -lt').read() # 调用read()方法可以得到命令的结果
total 6064
-rwxr-xr-x 1 long long 23 Jan 5 21:00 hello.sh
-rw-r--r-- 1 long long 147 Jan 5 20:26 Makefile
drwxr-xr-x 3 long long 4096 Jan 2 19:37 test
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log
drwxr-xr-x 2 long long 4096 Dec 28 09:36 pip_build_long
drwx------ 2 Debian-gdm Debian-gdm 4096 Dec 23 19:08 pulse-gylJ5EL24GU9
drwx------ 2 long long 4096 Jan 1 1970 orbit-long
>>> val = os.popen('ls -lt').read() # 使用变量可以接收命令返回值
>>> if "log" in val: # 我们可以使用in来判断返回值中有木有一个字符串
... print "Haha,there is the log"
... else:
... print "No,not happy"
...
Haha,there is the log
2. commands 模块
使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法:
* commands.getstatusoutput(cmd) 返回(status, output)
* commands.getoutput(cmd) 只返回输出结果
* commands.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法
[python]
view plain
long@zhouyl:/tmp/tests$ python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import commands
>>> commands.getstatusoutput('ls -lt') # 返回(status, output)
(0, 'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log')
>>> commands.getoutput('ls -lt') # 返回命令的输出结果(貌似和Shell命令的输出格式不同哈~)
'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
>>> commands.getstatus('log') # 调用commands.getoutput中的命令对'log'文件进行相同的操作
'-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
>>>
3. subprocess模块
根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。
[python]
view plain
>>> from subprocess import call
>>> call(["ls", "-l"])
subprocess与system相比的优势是它更灵活(你可以得到标准输出,标准错误,“真正”的状态代码,更好的错误处理,等..)。我认为使用os.system已过时,或即将过时。
② 如何使用Python3.4与Linux shell交互
在python里面可以操作linux的命令有
1,os.system("cmd")
2,os.open("cmd")
3,spawn*
4,subprocess
在最新的python里,推荐使用subprocess来与shell通信,它会生成一个子进程来连接输出,输入,错误等shell下3中标准的输入输出流,并返回执行结果的状态码0和1,来判断本次执行命令的成功与失败。
下面来看一个小例子,首先,确保你的linux环境支持python3.4,如果不支持,你可以参考散仙的上篇文章来安装python3.4
首先,在linux,执行python命令找到最新的python3.4的路径,然后再py文件里声明头部路径,如果不知道python的具体安装路径,可以使用which python来查找路径
[root@master ~]# py
pydoc pydoc3.4 python2 python3 python3.4-config python3.4m-config pyvenv
pydoc3 python python2.6 python3.4 python3.4m python3-config pyvenv-3.4
[root@master ~]# which python3.4
/usr/local/python3.4/bin/python3.4
[root@master ~]#
写完脚本之后,先给脚本赋值权限,再执行:
[root@master rtt]# chmod +x b.py
[root@master rtt]# cat b.py
#!/usr/local/python3.4/bin/python3.4
import subprocess as t
v=t.call("ls")
print ("返回值: ",v)
[root@master rtt]# b.py
a.py b.py b.txt
返回值: 0
[root@master rtt]#
看下面的例子,注意python的shell执行,返回的是一个字符串,如果我们想逐行解析,需要使用如下方法:
[root@master rtt]# cat b.txt
id name
1 a
2 战三
3 b
[root@master rtt]# cat a.py
#!/usr/local/python3.4/bin/python3.4
import os
import subprocess as t
#var=t.getoutput("df -h")
#v=t.call("ls")
#var=t.getoutput("cat b.txt | grep a ")
var=t.getoutput("df -h | cat -n ")
for line in var.split("\n"):
print("这一行:" +line)
#print(var)
[root@master rtt]# a.py
这一行: 1 Filesystem Size Used Avail Use% Mounted on
这一行: 2 /dev/sda2 9.7G 2.9G 6.3G 32% /
这一行: 3 tmpfs 495M 0 495M 0% /dev/shm
这一行: 4 /dev/sda1 194M 28M 157M 15% /boot
这一行: 5 /dev/sda3 9.9G 948M 8.5G 10% /home
[root@master rtt]#
最后看下python的两种,生成行号的方式:
tt="你好\n哈喽"
for i,it in enumerate(tt.split("\n")):
print(i,it)
for line in range(len(tt.split("\n"))):
print(line," ",tt.split("\n")[line])
输出结果如下:
0 你好
1 哈喽
0 你好
1 哈喽
③ python和linux到底有关系
python和linux两者间没什么关系,python是一门程序设计语言,linux是一个操作系统,向上支持应用软件的运行,向下控制硬件,是软件和硬件的过渡层。Python语言可以在Linux系统下学习和开发。
比如,如果是想用Python开发网站(现今流行的、成熟的Python Web框架)就需要使用到Linux平台;如果想使用Python爬虫爬取数据,在Linux系统上也要更方便一些;还有就是想学习网络安全渗透测试,在Linux上编写Python自动化测试脚本也很有必要。
(3)python操纵linux扩展阅读:
可以通过python对linux进行操作,利用python操纵linux的命令为:
1、import os
#返回操作系统类型,值为posix,是linux操作系统,值为nt,是window操作系统
2、print os.name
#返回操作系统的详细信息
3、print os.uname()
#系统的环境变量
4、print os.environ
print os.environ.get('PATH')
#判断是否为绝对路径(不会判断文件或者目录是否存在)
5、print os.path.isabs('/tmp/westos')
print os.path.isabs('hello')
#生成绝对路径
④ 如何用python编写一个windows下远程控制Linux的程序
就用python的socket编程就可以了呵
在linux下面用python写一个,windows下面用python写一个,然后通过传输字符串来判断命令
然后linux将返回信息返回给windows,然后windows在显示
⑤ 怎么在linux上运行python
Linux默认是已经安装好了Python程序
目前来说,大多数的Linux发行版是安装了两个版本的Python程序
一个是Python 2.x
一个是Python 3.x
一些系统自带的程序文件需要Python 2的支持,另外Python 3又是大势所趋
所以,我们最好不要动系统的Python版本
需要使用哪个版本直接声明就可以了
运行Python的方法:
我们在Linux系统上打开终端
输入python
会弹出Python 2的版本和解释器
输入python3
会弹出Python 3的版本和解释器
所以我们一般情况下,运行python 2的程序就输入命令
python 程序文件
运行python 3的程序输入命令
python3 程序文件
这里我们默认使用版本为Python 3
在终端输入命令
Python3
弹出Python的解释器以>>>开头
我们可以在上面输入Python程序
它会直接输出结果
比如:
我们这里输入32+46,输出结果为78
输入print('hello python'),输出结果hello python
注意:当我们运行.py文件时,文件里的32+46是不会直接打印出来的
必须加打印命令
print(32+46)
我们退出python3解释器的快捷键不是Ctrl+C
而是Ctrl+Z
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于怎么在linux上运行python的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
⑥ linux怎么使用python
不知你用什么Linux,linux太多了,cent os,redhat,Fedora,还是Ubuntu等的?
一般主流的Linux都自带python(有的自带2.6版本,有的自带2.7),在终端界面输入Python,回车,如果能进入就代表自带有,如果报错即表示没有,需要到Python官网下载安装或者在终端界面使用yum命令或者apt get命令安装Python
⑦ 怎样用Python脚本实现Linux操作系统管理的一般步骤
python+linux请投python区或者linux区
⑧ Python脚本在Linux上怎么运行
一、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。
⑨ 在windows上的python 连接 linux 并做点操作
访问SqlServer
复制代码代码如下:
>>> import pyodbc
>>>cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.100\\sql;DATABASE=testDB;UID=sa;PWD=myPassword')
>>>cursor = cnxn.cursor()
>>>cursor.execute("select * from Tb")
二、Linux下配置Python访问SqlServer
环境:CentOS 6.2 + Sqlserver 2008
1、安装freetds:
复制代码代码如下:
yum install freetds*
2、安装pyodbc:
复制代码代码如下:
yum install pyodbc
修改odbc配置:
复制代码代码如下:
vi /etc/odbcinst.ini
添加FreeTDS驱动:
复制代码代码如下:
[SQL Server]
Description = FreeTDS ODBC driver for MSSQL
Driver = /usr/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
FileUsage = 1
3、测试
复制代码代码如下:
#python
>>> import pyodbc
>>>cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.100\\sql;DATABASE=testDB;UID=sa;PWD=myPassword')
>>>cursor = cnxn.cursor()
>>>cursor.execute("select * from Tb")
⑩ 如何批量控制linux服务器++python
目前python脚本用于linux服务器主要是实现自动化的中文书只有这本《Python UNIX 和Linux 系统管理指南》本书介绍了Python语言如何为管理uNIx和Linux服务器提供各种更加有效的任务处理方式。书中各章都提出了具体的管理问题,如并发或数据备份,然后通过Python示例提供了解决方案。通过本书,读者可以学习如何用Python开发自己的一套命令行工具来解决诸多问题。
参考资料: http://www.mokomodo.com/python-linux-management.php