• 前言

说起python,大家都知道可以做很多有趣的事儿。知乎、CSDN上很多大牛做过很多或高大上或实用的事儿。参见这篇文章Python趣味代码整合之提升学生编程兴趣

另外,我发现命令行也可以做很多事。以下是我的一些想法,欢迎大家补充!

  • 环境配置与模块安装

  1. 运行环境:Python3.6+cmd命令行
  2. 依赖模块:requests,bs4,numpy,PIL,webbrowser,subprocess

模块具体安装方法参见网上教程

  • 实现功能

  • 查询天气

早上起来,想看今天的天气,打开电脑,百度搜索地点,简直太麻烦。不妨命令行输入指令快速获取。(请忽略手机查看等其他更快捷方式,虽然相比较而言前者有些不足,但,存在即有意义,命令行也可以做很多事。)

import requests
from bs4 import BeautifulSoup
#获取www.tianqi.com的天气,参数:地名拼音
def data_of_tianqi(addr):
response = requests.get("https://www.tianqi.com/"+addr+"/")
soup = BeautifulSoup(response.text, 'html.parser')
tag_dd = soup.find_all(name='dd')
tag_span = soup.find_all(name='span')[0]
temp = str(soup.find_all(name='b')[0])[3:-4]#温度
city_html = BeautifulSoup(str(tag_dd[0]), 'html.parser')
city = str(city_html.find_all(name='h2'))[5:-6]#城市
if str(tag_dd[1])[41:43]=='</':
time=str(tag_dd[1])[17:41]
else:
time=str(tag_dd[1])[17:43]
weather_and_temp = str(tag_span)[9:-7].split('</b>')
weather = weather_and_temp[0]#天气
temp = str(soup.find_all(name='b')[0])[3:-4]#实时温度
temp_from_to = weather_and_temp[1]#温度范围
shidu = str(tag_dd[3]).replace("</b>","").replace("</dd>","").split("<b>")[1]#湿度
fengxaing = str(tag_dd[3]).replace("</b>","").replace("</dd>","").split("<b>")[2]#风向
ziwaixian = str(tag_dd[3]).replace("</b>","").replace("</dd>","").split("<b>")[3]#紫外线
other_info = str(tag_dd[4])[57:-12].replace('</h5><h6>','<br/>').replace('</h6><span>','<br/>').split('<br/>')#空气质量、PM、日出、日落
print('城市:'+city)
print('时间:'+time)
print('天气:'+weather)
print('实时温度:'+temp+' '+'温度范围:'+temp_from_to)
print(shidu+' '+fengxaing+' '+ziwaixian)
print(other_info[0]+' '+other_info[1])
print(other_info[2]+' '+other_info[3])

代码参考了一些网上资料(表示感谢),再做了相应修改,展示更美观一些。

在命令行输入python start.py weather chengdu,便得到的成都天气信息:

  • .浏览器操作

想在命令行百度搜索、360搜索、必应搜索?想快速打开指定网页?没关系,这些都可以实现!

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 7 11:06:53 2018
快速搜索(百度、360、必应)&快速打开常用网站
csdn 百度 MOOC 新华社
@author: Administrator
"""
import webbrowser
def search(word):
if word[0]=='baidu':
print('百度搜索'+word[1]+'内容正在打开。。。')
webbrowser.open('https://www.baidu.com/s?wd='+word[1])
if word[0]=='360':
print('360搜索'+word[1]+'内容正在打开。。。')
webbrowser.open('https://www.so.com/s?q='+word[1])
if word[0]=='biying':
print('必应搜索'+word[1]+'内容正在打开。。。')
webbrowser.open('http://global.bing.com/search?q='+word[1])
def webopen(word):
name=['csdn','百度','MOOC','新华社']
words=['csdn','baidu','mooc','xhs']
if type(word)==list:
search(word)
elif word not in words:
print('访问失败!')
else:
for i in range(len(words)):
if word==words[i]:
print('您访问的'+name[i]+'正在打开。。。')
break
if i==0:
webbrowser.open('https://download.csdn.net/my')
elif i==1:
webbrowser.open('https://www.baidu.com/')
elif i==2:
webbrowser.open('http://www.icourse163.org/home.htm?userId=7816710#/home/course')
elif i==3:
webbrowser.open('http://www.xinhuanet.com/english/home.htm')

由于一些隐私原因,我删除了部分我常去的一些网站,你当然也可以按照格式添加属于你的网站访问快捷方式。

  • 启动应用程序

同样,用subprocess模块可以打开计算机上的应用程序。虽然现在电脑软件大多有快捷方式,但是用命令行打开其实也挺不错的。

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 8 10:59:15 2018
命令行启动应用程序
@author: Administrator
"""
import subprocess
def setup(word):
words=['excel','word','ppt','visio','pycharm']
if word not in words:
print('打开失败!')
else:
for i in range(len(words)):
if word==words[i]:
print(word+'应用程序正在打开中。。。')
break
if i==0:
subprocess.Popen('C:\\Program Files\\Microsoft Office\\Office16\\EXCEL.exe')
if i==1:
subprocess.Popen('C:\\Program Files\\Microsoft Office\\Office16\\WINWORD.exe')
if i==2:
subprocess.Popen('C:\\Program Files\\Microsoft Office\\Office16\\POWERPNT.exe')
if i==3:
subprocess.Popen('C:\\Program Files\\Microsoft Office\\Office16\\VISIO.exe')
if i==4:
subprocess.Popen('C:\\Program Files\\JetBrains\\PyCharm Community Edition 2017.2.4\\bin\\pycharm64')

  • 图片转字符

参考《python 极客项目编程》这本书有关于ASCII文本图形的代码,并做相应修改。如下:

"""
ascii.py A python program that convert images to ASCII art. Author: Mahesh Venkitachalam
""" import numpy as np
from PIL import Image
# gray scale level values from:
# http://paulbourke.net/dataformats/asciiart/ # 70 levels of gray
gscale1 = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. "
# 10 levels of gray
gscale2 = '@%#*+=-:. ' def getAverageL(image):
"""
Given PIL Image, return average value of grayscale value
"""
# get image as numpy array
im = np.array(image)
# get shape
w,h = im.shape
# get average
return np.average(im.reshape(w*h)) def covertImageToAscii(fileName, cols, scale, moreLevels):
"""
Given Image and dims (rows, cols) returns an m*n list of Images
"""
# declare globals
global gscale1, gscale2
# open image and convert to grayscale
image = Image.open(fileName).convert('L')
# store dimensions
W, H = image.size[0], image.size[1]
print("input image dims: %d x %d" % (W, H))
# compute width of tile
cols=int(cols)
w = W/cols
# compute tile height based on aspect ratio and scale
h = w/scale
# compute number of rows
rows = int(H/h) print("cols: %d, rows: %d" % (cols, rows))
print("tile dims: %d x %d" % (w, h)) # check if image size is too small
if cols > W or rows > H:
print("Image too small for specified cols!")
exit(0) # ascii image is a list of character strings
aimg = []
# generate list of dimensions
for j in range(rows):
y1 = int(j*h)
y2 = int((j+1)*h)
# correct last tile
if j == rows-1:
y2 = H
# append an empty string
aimg.append("")
for i in range(cols):
# crop image to tile
x1 = int(i*w)
x2 = int((i+1)*w)
# correct last tile
if i == cols-1:
x2 = W
# crop image to extract tile
img = image.crop((x1, y1, x2, y2))
# get average luminance
avg = int(getAverageL(img))
# look up ascii char
if moreLevels:
gsval = gscale1[int((avg*69)/255)]
else:
gsval = gscale2[int((avg*9)/255)]
# append ascii char to string
aimg[j] += gsval # return txt image
return aimg # main() function
def ascii_write(word):
word=['D:\\pycodes\\命令行快速访问\\asc_data\\'+word[0],word[1]]
imgFile = word[0]
# set output file
outFile = 'D:\\pycodes\\命令行快速访问\\asc_data\\out.txt'
# set scale default as 0.43 which suits a Courier font
scale = 0.43
# set cols
cols = word[1]
print('generating ASCII art...')
# convert image to ascii txt
aimg = covertImageToAscii(imgFile, cols, scale,0)
# open file
f = open(outFile, 'w')
# write to file
for row in aimg:
f.write(row + '\n')
# cleanup
f.close()
print("ASCII art written to %s" % outFile)

命令行上输入python start.py pyascii panda1.jpg 200,回车,便得到由字符拼接的萌萌的大熊猫宝宝啦。由于截图大小有限,这里仅放上它炯炯有神的大眼睛。

萌死我啦!注意:图片名后的数字代表像素,数字越大,图片细节越清晰,但txt文档打开一个界面看不完(必须滑动)

  • 主程序

你可能会奇怪,为什么命令行执行的都是start.py文件,难道不可以直接运行各个子程序吗?本来是可以的,但是为了追求简洁统一,避免C:\Users\Administrator\目录下放到py文件过多,便写了个主程序start.py(必须放于C:\Users\Administrator\目录下!)。

Created on Mon Aug  6 21:05:09 2018

@author: Administrator
命令行快速查询、启动、运行
"""
import sys
sys.path.append('D:\\pycodes\\命令行快速访问')
import weather
import pyascii
import webopen
import setup
if len(sys.argv) < 2:
sys.exit()
code= ' '.join(sys.argv[1:2])
word= ' '.join(sys.argv[2:3])
if len(sys.argv)>3:
t=' '.join(sys.argv[3:4])
word=[word,t]
codes=['weather','pyascii','webopen','setup']
if code not in codes:
print('Wrong instructions!')
else:
for i in range(len(codes)):
if code==codes[i]:
print('Instructions will be executed!')
break
if i==0:
weather.data_of_tianqi(word)
elif i==1:
pyascii.ascii_write(word)
elif i==2:
webopen.webopen(word)
elif i==3:
setup.setup(word)

Github传送门:https://github.com/SCHaoZhang/python/tree/master/python_cmd

如果你还有其他的好点子,请分享给我哈!如果文中有不足之处,请私聊哈!

python之命令行可以做的事儿的更多相关文章

  1. Python执行命令行

    背景 我们知道,虽然会破坏平台独立性,但是有的时候需要在代码里面调用命令行来获取一些信息,那么了解在 Python 中如何执行命令行至关重要 使用介绍 Python 中使用命令行可以通过 subpro ...

  2. Python之路,Day17 - 分分钟做个BBS论坛

    Python之路,Day17 - 分分钟做个BBS论坛   本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...

  3. 【python】命令行解析工具argparse用法

    python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...

  4. 如何使用python自定义命令

    dir.tree.cd等等,都是我们常见的命令.这些命令是开发者开发出来的,如果我们自己想按照自己的想法开发一个命令,应该怎么做呢? 以python语言来实现,问题就是:如何使用python自定义命令 ...

  5. python制作命令行工具——fire

    python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...

  6. Monkey测试4——Monkey命令行可用的全部选项

    Monkey命令行可用的全部选项 常规 --help 列出简单的用法. -v 命令行的每一个-v将增加反馈信息的级别. Level 0(缺省值)除启动提示.测试完成和最终结果之外,提供较少信息. Le ...

  7. Python 之 使用 PIL 库做图像处理

    http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...

  8. python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis

    目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...

  9. Python的命令模式和交互模式

    Python的命令行模式和交互模式 请注意区分命令行模式和Python交互模式. 在命令行模式下,可以执行python进入Python交互式环境,也可以执行python first.py运行一个.py ...

随机推荐

  1. web框架之socket

    概述 套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信.这就是所谓的进程间通信 ( Inter Process Communication, ...

  2. Windows 7通过VirtualBox配置镜像加速

    配置Docker镜像加速: 1.双击,开启default 2.开启后执行下面的命令修改profile文件: sudo vi /var/lib/boot2docker/profile 打开文件之后,敲下 ...

  3. flask上下文管理相关 - threading.local 以及原理剖析

    threading.local 面向对象相关: setattr/getattr class Foo(object): pass obj = Foo() obj.x1 = 123 # object.__ ...

  4. C/C++笔试基础知识

    1. int *a[10] :指向int类型的指针数组a[10] int (*a)[10]:指向有10个int类型数组的指针a int (*a)(int):函数指针,指向有一个参数并且返回类型均为in ...

  5. Docker部署WordPress网站

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,WordPress 不仅仅是一个博客程序,也是一款CMS,很多非博客网站也是用Wo ...

  6. d3学习之路

    d3学习历程: 轻量化编译器:HbuiderXHbuiderX使用教程   理解HTMl js CSS 三者关系   学习html js css :1)w3school           2)moo ...

  7. Linux系列(17)之系统服务

    我们知道,在我们登陆Linux后,系统就为我们提供了很多服务,比如例行工作调度服务crond.打印服务.邮件服务等.那么这些服务是如何被启动的呢? 这个问题先放一下,接下来我们先了解一下Linux的启 ...

  8. Rikka with Graph hdu 6090

    题解:考虑贪心地一条一条边添加进去. 当 m \leq n-1m≤n−1 时,我们需要最小化距离为 nn 的点对数,所以肯定是连出一个大小为 m+1m+1 的联通块,剩下的点都是孤立点.在这个联通块中 ...

  9. Python实现乘法表——在列表里进行for循环设初值

    代码:最大的收获是二维列表的实现:[0]*9结果是[0,0,0,0,0,0,0,0,0,0],再加上for i in range(9),代表是9行[0,0,0,0,0,0,0,0,0,0],也就是9* ...

  10. 使用cublas 矩阵库函数实现矩阵相乘

    2014-08-10 cublas中执行矩阵乘法运算的函数 首先要注意的是cublas使用的是以列为主的存储方式,和c/c++中的以行为主的方式是不一样的.处理方法可参考下面的注释代码 // SOME ...