① python commands.getstatusoutput 一直不退出,求教
因为CPython坚持要让commands模块为Unix-specific而不打算兼容Windows呗。
>>> import sys
>>> sys.platform
'win32'
>>> from subprocess import getoutput
>>> getoutput('echo')
'ECHO 处于打开状态。'
Python 2 大概是不会修了。不过它也有 subprocess 模块!
② python commands 需要导入 哪个模块
要获得shell命令的输出只需要`cmd`就可以了,
需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果.
看一下三个函数:
1). commands.getstatusoutput(cmd)
用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result). cmd执行的方式是{ cmd ; } 2>&1, 这样返回结果里面就会包含标准输出和标准错误.
2). commands.getoutput(cmd)
只返回执行的结果, 忽略返回值.
3). commands.getstatus(file)
返回ls -ld file执行的结果.
看一下这些函数使用的例子:
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
③ python中的命令
(1)os.system
# 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
# 如果再命令行下执行,结果直接打印出来例如: osos.system('ls')
chk_err_log.py CmdTool.log install_log.txt install_zabbix.sh manage_deploy.sh MegaSAS.log
(2)os.popen
#该方法不但执行命令还返回执行后的信息对象
#好处在于:将返回的结果赋于一变量,便于程序的处理。
例如:import ostmp = os.popen('ls *.sh').readlines()tmp['install_zabbix.shn', 'manage_deploy.shn', 'mysql_setup.shn', 'python_manage_deploy.shn', 'setup.shn']
(3)使用模块subprocess使用方法:import subprocess
subprocess.call (["cmd", "arg1", "arg2"],shell=True)
好处在于:运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。
如获取返回和输出:
import subprocess
p = subprocess.Popen('ls *.sh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print p.stdout.readlines()
for line in p.stdout.readlines():
print line,
retval = p.wait()
(4) 使用模块commands模块
常用的主要有两个方法:getoutput和getstatusoutput
import commands
commands.getoutput('ls *.sh')
'install_zabbix.shnmanage_deploy.shnmysql_setup.shnpython_manage_deploy.shnsetup.sh'
commands.getstatusoutput('ls *.sh')
(0, 'install_zabbix.shnmanage_deploy.shnmysql_setup.shnpython_manage_deploy.shnsetup.sh')
注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现错误。
④ 如何在python等脚本中调用outlook组件
最近有个需求就是页面上执行shell命令,第一想到的就是os.system,
复制代码代码如下:
os.system('cat /proc/cpuinfo')
但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。
尝试第二种方案 os.popen()
复制代码代码如下:
output = os.popen('cat /proc/cpuinfo')
print output.read()
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值)
尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。
复制代码代码如下:
(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output
Python Document 中给的一个例子,
复制代码代码如下:
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
最后页面上还可以根据返回值来显示命令执行结果。
⑤ python怎么执行shell命令
工具/原料
Python环境
方法/步骤
os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的
os.popen(command[,mode[,bufsize]]),
图中是一个例子.
可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败
时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。
使用commands模块,图中是一组例子。根据你需要的不同,commands模块有三个方法可供选择。getstatusoutput, getoutput, getstatus。
但是,如上三个方法都不是Python推荐的方法,而且在Python3中其中两个已经消失。Python文档中目前全力推荐第四个方法,subprocess! subprocess使用起来同样简单:
直
接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用
shell=True。建议使用Python库来代替shell命令,或使用pipe的一些功能做一些转义。官方的出发点是好的,不过真心麻烦了很多,
so.... 如果你更关注命令的终端输出,可以如下图这样操作, 同样很简单.
⑥ python中,执行命令的方法有哪些
1. os.system()
这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息。
2. os.popen()
这个方法执行命令并返回执行后的信息对象,是通过一个管道文件将结果返回。
3. commands模块
注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后的返回值不等,这是因为调用了os.wait()的缘故,具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作就可以了。
注意2:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。
4. subprocess模块
该模块是一个功能强大的子进程管理模块,是替换os.system, os.spawn*等方法的一个模块。
⑦ python如何分别向两个cmd窗口输入指令
可以用 Popen.stdin.write(),但这是 Python 文档里不推荐的,因为很容易导致死锁:
process = Popen(["powershell"], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
commands = [ "python --version", "activate py34", "python --version"]for cmd in commands: process.stdin.write((cmd + "\n").encode("utf-8")) process.stdin.flush()for line in iter(process.stdout.readline, ""):
print(line.strip().decode("utf-8"))
⑧ windows中用python执行commands.getstatusoutput为什么出错
那么你就allcommands=["blabla","blablabla"] 然后 for cmd in allcommands: ________commands.getstatusoutput(cmd) 吧,我是windows,不能使用这个mole 我的意思是你有多个命令的话,写到列表里面,一个一个调用。
完成。