当前位置:首页 » 编程语言 » python调用linux程序

python调用linux程序

发布时间: 2022-07-16 04:53:25

python 怎么调用linux下的tcpmp

之前在linux用python脚本写一个抓包分析小工具,实在不想用什么libpcap、pypcap所以,简单来了个tcpmp加grep搞定。基本思路是分别起tcpmp和grep两个进程,进程直接通过pipe交换数据,简单代码如下:

[python] view plain
#! /usr/bin/python

def tcpmp():
import subprocess, fcntl, os
# sudo tcpmp -i eth0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*"
cmd1 = ['tcpmp', '-i', 'eth0', '-n','-B', '4096','-s', '0', '-w', '-']
cmd2 = ['grep', '--line-buffered', '-a', '-o', '-E', 'Host: .*|GET /.*']
p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
p2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stdin=p1.stdout)

flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL)
fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL, (flags | os.O_NDELAY | os.O_NONBLOCK))
return p2

def poll_tcpmp(proc):
#print 'poll_tcpmp....'
import select
txt = None
while True:
# wait 1/10 second
readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1)
if not len(readReady):
break
try:
for line in iter(proc.stdout.readline, ""):
if txt is None:
txt = ''
txt += line
except IOError:
print 'data empty...'
pass
break
return txt

proc = tcpmp()
while True:
text = poll_tcpmp(proc)
if text:
print '>>>> ' + text

❷ 怎样在linux上执行python程序

在linux上执行python程序的方法:1、打开python脚本,在脚本头部添加【#!/usr/bin/python2.7】;2、执行【chmod +x xxx.py】命令为脚本增加执行权限;3、执行【./xxx.py】命令即可运行。
方法一:
(推荐教程:Python入门教程)
在文件的头部(第一行)写上#!/usr/bin/python2.7,这个地方使用python的绝对路径,就是上面用which python查询来的结果。然后在外面就可以使用./xxx.py执行了。
方法二:
直接使用python xxxx.py执行。其中python可以写成python的绝对路径。使用which python进行查询。

❸ 如何在linux下运行python程序

$
pico
try_python
下面输入一段简单的python代码,来检查它是否工作。
#!/usr/bin/env
python
print
2+2
第一行告诉shell如何执行此文本文件,第二行是一个简单的shell表达式。在保存文件后,改变其属性使其可以执行。
$
chmod
a+x
try_python
然后在命令行试运行它。
$
./try_python

❹ 如何在linux下运行python程序

先将终端所在路径切换到python脚本文件的目录下然后给脚本文件运行权限,一般755就OK,如果完全是自己的私人电脑,也不做服务器什么的,给777的权限问题也不大(具体权限含义参考chmod指令的介绍,就不赘述了):chmod755./*.py然后执行。如果在脚本内容的开头已经给出了类似于如下的注释:#!/usr/bin/envpython那就可以直接在终端里运行:./*.py如果没有这个注释就在终端中执行:python./*.py如果是有图形界面的脚本在前面的chmod之后,直接双击(KDE桌面是单击)文件来执行即可《linux就该这么学》免费实用的linux学习资料

❺ 如何使用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怎么操作

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已过时,或即将过时。

❼ Python脚本在Linux上怎么运行

一、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。

❽ python中,调用linux执行命令的方法中有break,需要用到返回值 继续自己的程序,结果执

摘要 您好,我这边正在为您查询,请稍等片刻,我这边马上回复您~关于python中,调用linux执行命令的方法中有break,需要用到返回值 继续自己的程序,结果执行调用方法就退出程序了,怎么办?

热点内容
脚本微信取关 发布:2025-02-01 19:35:01 浏览:150
如何用云服务器部署svn 发布:2025-02-01 19:33:20 浏览:988
缓存迅雷 发布:2025-02-01 19:31:53 浏览:974
linux与unixshell编程指南 发布:2025-02-01 19:25:03 浏览:938
护肤品数据库 发布:2025-02-01 19:25:02 浏览:647
python接受json数据 发布:2025-02-01 19:24:24 浏览:942
修改网站数据库 发布:2025-02-01 19:02:16 浏览:423
果粉不换安卓怎么办 发布:2025-02-01 18:57:21 浏览:796
网页卡需要什么配置 发布:2025-02-01 18:50:30 浏览:136
编程玩家 发布:2025-02-01 18:22:36 浏览:823