powershell 学习笔记

最近在学习PowerShell的一些基础知识,这边记录下一些学习笔记,都很简单,也没有涉及管道,cmdlets的用法。

最开始犯的第一个错误

在编写PowerShell脚本的时候,有一点刚开始很容易出现错误,就是扩展名是.ps1(数字)不是.psl(字母)。

变量

变量创建

PowerShell不必显示声明变量,只需要在用到的时候创建即可。变量必须以 $ 作前缀,随后可以是数字、字母、下划线的任意字符(也可以使用汉字等)。PowerShell的变量是不区分大小写的:

一些特殊的字符如$等,如果变量名要使用这些字符,需要用花括号将$后面的后缀括起来:

由于PowerShell支持对象,所以使用等号(=)可以把任何数据包括cmdlet命令赋值给一个变量,比如我们把 ls 的执行结果赋给一个变量, ls返回的结果并不是一个纯文本,相反是一个object数组,每项的类型是DirectoryInfo:

predefined变量

在PowerShell中还有一些是PowerShell启动就会加载的变量,称为自动变量:

变量 说明
$$ 会话所收到的最后一行中的最后一个令牌
$? 最后一个操作的执行状态。如果最后一个操作成功,则包含 TRUE,失败则包含 FALSE
$^ 会话所收到的最后一行中的第一个令牌
$_ 管道对象中的当前对象。在对管道中的每个对象或所选对象执行操作的命令中,可以使用此变量
$Args 包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组。在创建函数时可以声明参数,方法是使用 param 关键字或在函数名称后添加以圆括号括起、逗号分隔的参数列表
$ConsoleFileName 包含在会话中最近使用的控制台文件 (.psc1) 的路径。在通过 PSConsoleFile 参数启动Windows PowerShell 或使用 Export-Console cmdlet 将管理单元名称导出到控制台文件时,将填充此变量
$PsCmdlet 包含操作系统中当前所用的区域性的名称。区域性确定数字、货币和日期等项的显示格式。这是系统的 System.Globalization.CultureInfo.CurrentCulture.Name 属性的值。要获取系统的 System.Globalization.CultureInfo 对象,请使用 Get-Culture cmdlet

python virtualenv 使用

virtualenv是python开发中常用的一个工具,用来创建一个虚拟的环境,将项目需要用到的package安装进这个虚拟环境中,与系统全局的package进行隔离,避免影响全局的package结构。要使用这些安装在虚拟环境中的package,只要activate就行了。

安装

安装virtualenv工具(Ubuntu)

sudo apt-get install python-virtualenv

使用

创建项目的目录,作为虚拟环境

$ mkdir project_name
$ cd project_name
$ virtualenv env
New python executable in env/bin/python
Installing setuptools............done.
Installing pip...............done.

使用epiceditor和pythonmakrdown遇到的no-break问题

最近在学习webpy(好像学了一段时间了= =),用来捣腾个博客系统(好吧,其实只是拿来学习入门python的),使用markdown在线编
辑器epiceditor编写文章,然后post方式提交到后台,后台使用python markdown将markdown解析
成html, 使用的过程中就发现如果markdown文本中存在多个空格,比如你要输入一段代码,markdown的语法就是前面留4个空格,如果我们后台直接解析,就无法正确地解析成<pre>和<code>标签。
被这个问题搞了好久,最后看了下epiceditor代码,找到了其中 exportFile 方法中的一段注释:

webpy中在子应用内使用session

背景

最近在学习webpy,做了个博客的小项目(webpy-blog)
在这个项目中,我将博客的后台管理当作是整个应用的子应用,这里涉及到用户登录后将用户的一些信息(比如id, hash等)存储
在session的问题,由于webpy默认session只能在主应用中共享,在子应用中即使import都不行。

子应用的使用

子程序的使用是为了更好地控制大型web应用,在webpy-blog中,我将后台管理单独剥离出来作为子程序,controllers.blogAdmin模块为其
controller。然后为子程序设置url映射。