如何在命令行运行脚本里运行python脚本

matthew0701 的BLOG
用户名:matthew0701
文章数:31
评论数:94
访问量:513679
注册日期:
阅读量:5863
阅读量:12276
阅读量:302341
阅读量:1021324
51CTO推荐博文
最近在学习python,借助fabric模块写了个批量操作服务器的脚本,在此分享给大家,如有不足之处,欢迎大家指正
准备工作:
安装python 2.6.5:
yum -y install readline*
tar xf Python-2.6.5.tar.bz2
cd Python-2.6.5
将目录下Modules/Setup.dist文件中&readline readline.c -lreadline -ltermcap&行前的注释去掉
编译安装:
./configure --enable-shared
make -j8 && make install
安装setuptools
tar xf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install
安装fabric
执行安装时,软件会自动从网上查找依赖的安装包并进行安装
tar xf fabric-0.9rc2.tar.gz
cd goosemo-fabric-1eacbf2
python setup.py install
############################################################################
pyssh脚本:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#####################################################
# Author: mayulin &
# Last modified:
# Filename: pssh.py
#####################################################
from fabric.api import env,run,put,get
from os import path
from re import findall
from sys import argv
from fabric.context_managers import hide
from time import sleep
USER='root'
HOST,IP_LIST=[],[]
PRI_KEY,PASSWORD,CMD,uSRC,uDST,dSRC,dDST='','','','','','',''
for i in range(1,len(argv)+1):
&&& if argv[i-1] == '-h' or len(argv)==1:
&&&&&&&&&&& print &&&
&&&&&&&&&&& USAGE:
&&&&&& -u [user]&&&&&& Use this argument to specify the user,default is 'root'
&&&&&& -H [host]&&&&&& The host that you want to connect
&&&&&& -f [file]&&&&&& The file content multiple ip address you want to connect
&&&&&& -P [port]&&&&&& The ssh port,default is 22
&&&&&& -p [pwd|file]&& You can specify password or a priviate key file to connect the host
&&&&&& -c [command]&&& The command you want the host(s) to run
&&&&&& -U [src,dst]&&& The local file that you want to upload to the remote host(s)
&&&&&& -D [src,dst]&&& The remote file that you want to download to the local host
&&&&&& -t [timeout]&&& The program running timeout,default is 1(s)
&&&&&& -h&&&&&&&&&&&&& Print this help screen
&&&&&&&&&&& &&&
&&& if argv[i-1] == '-u':
&&&&&&&&&&& USER=argv[i]
&&&&&&&&&&& env.user='%s'%(USER)
&&&&&&&&&&& env.user='%s'%(USER)
&&& if argv[i-1] == '-H':
&&&&&&& arg=findall('(\d+\.\d+\.\d+\.\d+|\s+\.{3,4})',argv[i])
&&&&&&& for j in arg:
&&&&&&&&&&& if type(j).__name__ !='NoneType':
&&&&&&&&&&&&&&& HOST.append(j)
&&&&&&&&&&& else:
&&&&&&&&&&&&&&& print 'The HostIP input error'
&&& if argv[i-1] == '-P':
&&&&&&& PORT=argv[i]
&&& if argv[i-1] == '-f':
&&&&&&& if path.isfile('%s'%(argv[i])) == True:
&&&&&&&&&&& IP_LIST=open('%s'%(argv[i]),'r').readlines()
&&& if argv[i-1] == '-p':
&&&&&&& if path.isfile(argv[i]) == True:
&&&&&&&&&&& PRI_KEY=argv[i]
&&&&&&&&&&& env.key_filename='%s'%(PRI_KEY)
&&&&&&& else:
&&&&&&&&&&& PASSWORD=argv[i]
&&&&&&&&&&& env.password='%s'%(PASSWORD)
&&& if argv[i-1] == '-c':
&&&&&&& CMD=argv[i]
&&& if argv[i-1]=='-t':&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &
&&&&&&& timeout=argv[i] &
&&& SLP='sleep %s'%(timeout)
&&& if argv[i-1] == '-U':
&&&&&&& x=src=argv[i].split(',')
&&&&&&& uSRC=x[0]
&&&&&&& uDST=x[1]
&&& if argv[i-1] == '-D':
&&&&&&& y=src=argv[i].split(',')
&&&&&&& dSRC=y[0]
&&&&&&& dDST=y[1]&&&&&&&&& &
&&& IP_PORT=[]
&&& if len(IP_LIST)!=0:
&&&&&&& for k in IP_LIST:
&&&&&&&&&&& IP_PORT.append(k.strip()+':'+PORT)
&&& if len(HOST)!=0:
&&&&&&& for k in HOST:
&&&&&&&&&&& IP_PORT.append(k.strip()+':'+PORT)
if CMD != '':
&& &def command():
&&&&&&&&&&& with hide('running'):
&&&&&&&&&&&&&&& run(&%s;%s& %(CMD,SLP))
&&& for ip in IP_PORT:
&&&&&&& env.host_string=ip
&&&&&&& print &Execute command : \&%s\& at Host : %s& %(CMD,ip.split(':')[0])
&&&&&&& print &-------------------------------------------------&
&&&&&&& command()
&&&&&&& print &-------------------------------------------------&
if uSRC and uDST !='':
&& &def upload():
&& &&&& with hide('running'):
&& &&&& &&& put(&%s& %(uSRC),&%s& %(uDST))
&& &for ip in IP_PORT:
&&&&&& &&&& env.host_string=ip
&&&&&& &&&& print &Upload local file : \&%s\& to Host : %s \&%s\&& %(uSRC,ip.split(':')[0],uDST)
&&&&&& &&&& print &-------------------------------------------------&
&&&&&& &&&& upload()
&&&&&& &&&& print &-------------------------------------------------&
&&&&&&&&&& &
if dSRC and dDST !='':
&& &def download():
&& &&&& with hide('running'):
&& &&&& &&& get(&%s& %(dSRC),&%s& %(dDST))
&& &for ip in IP_PORT:
&& &&&& env.host_string=ip
&&&&&& &&&& print &Download remote file : \&%s\& from Host : %s to local \&%s\&& %(dSRC,ip.split(':')[0],dDST)
&&&&&& &&&& print &-------------------------------------------------&
&&&&&& &&&& download()
&&&&&& &&&& print &-------------------------------------------------&
###########################################################################################
脚本执行效果:
显示帮助:
在多个远程主机上执行shell命令:
将远程主机上的文件下载到本地目录:
将本地文件上传到多个远程主机上
本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:    
类别:┆阅读(0)┆评论(0)
16:47:08 23:39:38 17:08:16
请输入验证码:使用Python执行系统命令的常见用法
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
本文总结了使用 程序执行系统的几种命令,介绍各个模块的优缺点。os.system模块仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息,如果在命令行下执行,结果直接打印出来
Python 2.6.6 (r266:84292, May 29 :27)
[GCC 4.4.6
(Red Hat 4.4.6-3)] on 2Type "help", "copyright", "credits" or "license" for more information.
&&& import os
&&& os.system('cat cont')
biz_order_idout_order_idbuy_nicksel_nickbuyersel0
&&& out=os.system('cat cont')
biz_order_idout_order_idbuy_nicksel_nickbuyersel
缺点:a.os.system() 是新起一个shell执行命令b.不能利用其它变量存放os.system()执行的结果,获得输出等信息比较麻烦.c.无法控制命令执行的状态,(如果调用的外部命令,挂死或者执行时间很长),主进程无法控制os.system(), 因为调用os.system(cmd) 调用进程会block,直到 os.system()命令结束自己退出。os.popen模块通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。例子1
&&& output = os.popen('date')
&&& print output
&open file 'date', mode 'r' at 0x7f7ae831e150&
&&& print output.read()
Sun Sep 13 22:34:56 CST 2015例子2
&&& output = os.popen('cat cont').readlines() ##返回一个数组
&&& print output
['biz_order_id\n', 'out_order_id\n', 'buy_nick\n', 'sel_nick\n', 'buyer\n', 'sel\n']
&&& print output[0]
biz_order_id优点1 该方法不但执行命令还返回执行后的信息对象,将返回的结果赋于一变量,便于程序的处理。缺点1 无法获取命令的执行结果的状态。commands模块和os.system的执行方式类似,在子系统终端执行命令。该模块包含如下三种函数:commands.getstatusoutput(cmd)commands.getoutput(cmd) 返回命令的执行结果commands.getstatus(file) 返回 ls -ld file 的执行结果。
&&& output=commands.getoutput("date")
&&& print outputSun Sep 13 22:37:44 CST 2015
&&& status=commands.getstatus("date")
&&& print statusls: cannot access date: No such file or directory
&&& commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root root 111744 May 29 2014 /bin/ls'
&&& st=commands.getstatus('/bin/ls')
&&& print st
-rwxr-xr-x 1 root root 111744 May 29 2014 /bin/ls
&&& status,output=commands.getstatusoutput("ls yy")
&&& print status,output512 ls: cannot access yy: No such file or directory优点:a.容易获得外部命令的结果输出和命令执行的状态缺点:b.不能利用其它变量存放os.system()执行的结果,获得输出等信息比较麻烦.c.无法控制命令执行的状态,(如果调用的外部命令,挂死或者执行时间很长),主进程无法控制os.system(), 因为调用os.system(cmd) 调用进程会block,直到 os.system()命令结束自己退出。需要注意事的是 该模块已经在 python 3 中被废弃了,推荐使用 subprocess代替。subprocess 模块运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。详细资料请参考 官方文档
&&& import subprocess
&&& subprocess.call(["ls", "-l"])
-rwxr-xr-x 1 qilong.yangql users 14 Dec 30 2014 a
-rw-r--r-- 1 qilong.yangql users 54 Sep 13 22:22 cont
-rwxr-xr-x 1 root root 19 Jun 1 11:01 d
-rw-r--r-- 1 root root 68 Jul 7 09:45 databasedrwxr-xr-x 3 qilong.yangql users 4096 Jan 11 2015 dbscripts0
&&& subprocess.call(["ls"])
a cont d database dbscripts0
&&& Popen = subprocess.Popen(["date"])
&&& Sun Sep 13 22:57:08 CST 2015
&&& Popen.pid优点1 支持和子进程交互2 支持命令结果输出3 可以使用kill() ,terminate() 来控制子进程退出4 还有很多请参考官方文档。下面关于Python的文章您也可能喜欢,不妨看看:Python:在指定目录下查找满足条件的文件 http://www.codesec.net/Linux/283.htmPython2.7.7源码分析 http://www.codesec.net/Linux/168.htm无需操作系统直接运行 Python 代码 http://www.codesec.net/Linux/357.htmCentOS上源码安装Python3.4 http://www.codesec.net/Linux/870.htm《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.codesec.net/Linux/25.htm《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.codesec.net/Linux/93.htmPython脚本获取Linux系统信息 http://www.codesec.net/Linux/31.htm在Ubuntu下用Python搭建桌面算法交易研究环境 http://www.codesec.net/Linux/34.htmPython 语言的发展简史 http://www.codesec.net/Linux/206.htmPython 的详细介绍:请点这里Python 的下载地址:请点这里本文地址:http://www.codesec.net/Linux/011.htm
本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
有时候,你需要出去走一走,呼吸一下新鲜空气,然后提醒自己,你是谁?想成为什么样的人?
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.netPython 基础教程
Python 环境搭建
本章节我们将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。
Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。) Win 9x/NT/2000 Macintosh (Intel, PPC, 68K) OS/2 DOS (多个DOS版本) PalmOS Nokia 移动手机 Windows CE Acorn/RISC OS BeOS Amiga VMS/OpenVMS QNX VxWorks Psion Python 同样可以移植到 Java 和 .NET 虚拟机上。
Python下载 Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网: 你可以在一下链接中下载Python的文档,你可以下载 HTML、PDF 和 PostScript 等格式的文档。 Python文档下载地址: Python安装 Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。 您需要下载适用于您使用平台的二进制代码,然后安装Python。 如果您平台的二进制代码是不可用的,你需要使用C编译器手动编译源代码。 编译的源代码,功能上有更多的选择性, 为python安装提供了更多的灵活性。 以下为不同平台上安装Python的方法: Unix & Linux 平台安装 Python: 以下为在Unix & Linux 平台上安装 Python 的简单步骤:
打开WEB浏览器访问 选择适用于Unix/Linux的源码压缩包。 下载及解压压缩包。 如果你需要自定义一些选项修改Modules/Setup
执行 ./configure 脚本 make make install
执行以上操作后,Python会安装在 /usr/local/bin 目录中,Python库安装在/usr/local/lib/pythonXX,XX为你使用的Python的版本号。 Window 平台安装 Python: 以下为在 Window 平台上安装 Python 的简单步骤:
打开WEB浏览器访问 在下载列表中选择Window平台安装包,包格式为:python-XYZ.msi 文件 , XYZ 为你要安装的版本号。 要使用安装程序 python-XYZ.msi, Windows系统必须支持Microsoft Installer 2.0搭配使用。只要保存安装文件到本地计算机,然后运行它,看看你的机器支持MSI。Windows XP和更高版本已经有MSI,很多老机器也可以安装MSI。
下载后,双击下载包,进入Python安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可。
MAC 平台安装 Python: 最近的Macs系统都自带有Python环境,你也可以在链接
上下载最新版安装。 环境变量配置 程序和可执行文件可以在许多目录,而这些路径很可能不在操作系统提供可执行文件的搜索路径中。 path(路径)存储在环境变量中,这是由操作系统维护的一个命名的字符串。这些变量包含可用的命令行解释器和其他程序的信息。 Unix或Windows中路径变量为PATH(UNIX区分大小写,Windows不区分大小写)。 在Mac OS中,安装程序过程中改变了python的安装路径。如果你需要在其他目录引用Python,你必须在path中添加Python目录。 在 Unix/Linux 设置环境变量
在 csh shell: 输入 setenv PATH "$PATH:/usr/local/bin/python" , 按下"Enter"。 在 bash shell (Linux): 输入 export PATH="$PATH:/usr/local/bin/python" ,按下"Enter"。 在 sh 或者 ksh shell: 输入 PATH="$PATH:/usr/local/bin/python" , 按下"Enter"。
注意: /usr/local/bin/python 是Python的安装目录。 在 Windows 设置环境变量 在环境变量中添加Python目录: 在命令提示框中(cmd) : 输入 path=%path%;C:\Python
按下"Enter"。
注意: C:\Python 是Python的安装目录。 也可以通过以下方式设置: 右键点击"计算机",然后点击"属性"然后点击"高级系统设置" 选择"系统变量"窗口下面的"Path",双击即可!
然后在"Path"行,添加python安装路径即可(我的D:\Python32),所以在后面,添加该路径即可。 ps:记住,路径直接用分号";"隔开! 最后设置成功以后,在cmd命令行,输入命令"python",就可以有相关显示。
Python 环境变量 下面几个重要的环境变量,它应用于Python:
变量名描述 PYTHONPATH PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。 PYTHONSTARTUP Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此文件中变量指定的执行代码。 PYTHONCASEOK 加入PYTHONCASEOK的环境变量, 就会使python导入模块的时候不区分大小写. PYTHONHOME 另一种模块搜索路径。它通常内嵌于的PYTHONSTARTUP或PYTHONPATH目录中,使得两个模块库更容易切换。
运行Python 有三种方式可以运行Python: 1、交互式解释器: 你可以通过命令行窗口进入python并开在交互式解释器中开始编写Python代码。 你可以在Unix,DOS或任何其他提供了命令行或者shell的系统进行python编码工作。
$ python # Unix/Linux
C:>python # Windows/DOS
以下为Python命令行参数:
选项描述 -d在解析时显示调试信息 -O生成优化代码 ( .pyo 文件 ) -S启动时不引入查找Python路径的位置 -V输出Python版本号 -X 从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时。 -c cmd执行 Python 脚本,并将运行结果作为 cmd 字符串。 file在给定的python文件执行python脚本。
2、命令行脚本 在你的应用程序中通过引入解释器可以在命令行中执行Python脚本,如下所示:
$ python script.py # Unix/Linux
C:>python script.py # Windows/DOS
注意:在执行脚本时,请检查脚本是否有可执行权限。 3、集成开发环境(IDE:Integrated Development Environment) 您可以使用图形用户界面(GUI)环境来编写及运行Python代码。以下推荐各个平台上使用的IDE:
Unix: IDLE 是 UNIX 上最早的 Python IDE 。 Windows: PythonWin 是一个 Python 集成开发环境,在许多方面都比 IDE 优秀 Macintosh: Python 的 Mac 可以使用 IDLE IDE,你可以在网站上下载对应MAC的IDLE 。
继续下一章之前,请确保您的环境已搭建成功。如果你不能够建立正确的环境,那么你就可以从您的系统管理员的帮助。 在以后的章节中给出的例子已在 Python2.7.6 版本测试通过。spyder如何从命令行执行脚本?
比如我写好一个python脚本文件test之后,想直接用run test.py来执行,而非F5,怎么实现,每次我这么做的时候spyder都提示我说语法错误。spyder帮助文件里提示我 --run-- 是所谓Internal Console里面的特殊语法,那么我如何才能转换到这个Internal Console?多谢
按投票排序
在IPython console里先cd到test.py所在的文件夹,再run test.py
举个栗子:run xxx.py --param1 p1 --param2 p2
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 命令行运行脚本 的文章

 

随机推荐