#44 通过 Windows 命令行(CMD)创建文件

2013-12-24

一、建立空文件的几种方法

  1. cd . > a.txt

cd.表示改变当前目录为当前目录,即等于没改变;而且此命令不会有输出。

表示把命令输出写入到文件。后面跟着a.txt,就表示写入到a.txt。
而此例中命令不会有输出,所以就创建了没有内容的空文件。

  1. copy nul a.txt

nul表示空设备,从概念上讲,它不可见,存在于每个目录中,可以把它看成一个特殊的 “文件”,它没有内容;一般可把输出写入到nul,来达到屏蔽输出的目的,如pause>nul,此命令执行效果是暂停,并且不会显示“请按任意键继续. . .”。
此例子表示将空设备复制到a.txt,同样创建了没有内容的空文件。

  1. type nul > a.txt

此例子表示显示空设备的内容,并写入到a.txt。

  1. echo a 2> a.txt

“2” 表示错误输出的句柄,此例中没有错误输出,所以创建了没有内容的空文件。
其实>默认都是重定向了句柄1,即标准输出句柄。比如 cd . > a.txt,其实就是 cd . 1> a.txt
同样,句柄 3 到 9 也可以使用在本例中,它们是未经定义的句柄,也不会有输出,如 echo a 3> a.txt

  1. fsutil file createnew d:\a.txt 0

使用 fsutil 创建了一个空文件。

  1. 其他命令

只要没有输出,并重定向到文件就可以了

二、建立非空文件的几种方法

  1. echo a>a.txt

最常用的是 echo 命令,此例子表示把字母a和回车换行覆盖输出到 a.txt(如果 a.txt 原来已有内容则覆盖掉原来的内容),如果追加内容,可以使用>>,如 echo b >> a.txt,表示把 b 和回车换行追加到文件末尾。

  1. 其他命令的重定向输出,如
type a.txt > b.txt
copy a.txt b.txt
fsutil file createnew d:\a.txt 1

#43 Python 命名元组

2013-12-23

collections.namedtuple 是一个工厂方法,用来创建一个 tuple 子类。

# python2
collections.namedtuple(typename, field_names[, verbose=False][, rename=False])
# verbose = True 对于 Python 初学者来说非常好,创建类型时,会输出类的完整定义,用来学习 Python 类的一些特性。
# 这个参数在 python3.7 版被移除

# python3
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
from collections import namedtuple

DBConn = namedtuple('MySQL', ('host', 'port', 'username', 'password', 'db'))
conn = DBConn('localhost', '3306', 'root', '123456', 'test')

conn
# MySQL(host='localhost', port='3306', username='root', password='123456', db='test')

conn._asdict()  # python2 输出 OrderedDict 类型
# {'host': 'localhost',
#  'port': '3306',
#  'username': 'root',
#  'password': '123456',
#  'db': 'test'}

conn.__class__
# __main__.MySQL

conn.host
# 'localhost'

#41 新作息时间表

2013-12-16

新制定一张作息时间表,规范一下自己的作息安排,不论寒暑,不分休息日和工作日。

#40 Cygwin 下安装软件的两种方式

2013-12-15

Cygwin 是一款能在 Windows 平台上运行的类 UNIX 模拟环境的开发工具。

通过 setup.exe

重新运行一遍 setup.exe,通过搜索找到需要安装的包,勾选就行了;

使用 apt-cyg

cwgwin 默认安装了 svn,可以通过 svn 命令下载:

svn --force export https://apt-cyg.googlecode.com/svn/trunk/ /bin/
chmod +x /bin/apt-cyg

或者:

wget https://apt-cyg.googlecode.com/svn/trunk/apt-cyg -P /bin

网上都说要 “chmod +x /bin/apt-cyg”,但是用 ls 查看的结果发现已经是可执行的了。

里面默认使用的安装源是 ftp://mirror.mcs.anl.gov,改成网易安装源:

apt-cyg -m https://mirrors.163.com/cygwin

先查看一下帮助:

先更新一下库的相关情况:apt-cyg update,竟然失败,报了 404。

查看网易的安装源,再比对刚才 update 的地址,发现原来网易安装源下面还有“x86”,“x86_64”这类架构,所以就把重新设置安装源:

apt-cyg -m https://mirrors.163.com/cygwin/x86

总算成功的 update 了,注意到安装目录下多出来了一个 setup 目录,有一个 setup.ini 文件。

随便试着安装一个 httping 试一下,结果失败了,一看下载路径中出现了两个 /x86。

找了一会儿原因,原来是因为 apt-cyg 是通过 setup.ini 中的路径下载软件,所以只好试着把里面所有的 x86/release 都替换成 release,然后通过 apt-cyg 的 -u 参数来禁止每次安装时都更新 setup.ini 文件,果然是有效的。

为了防止每次都需要加一个参数,况且总是将 apt-cyg 输成 apt-get,干脆可以设置别名:alias apt-get="apt-cyg -u"。

用了一段时间之后,发现这不是最佳方案,网友提供的方法才是问题的根源:

apt-cyg 其实是一个 bash 文件,可以直接在其中找出症结,就是每次更新都是通过 wget 命令实现,搜索 "wget -N $mirror/setup" 可以找到两行:

wget -N $mirror/setup.bz2
wget -N $mirror/setup.ini

可以将其中的 $mirror 后面接上 /x86 或者 /x86_64。

我想,一定有一个什么变量对应着这个架构目录名称,setup.ini 中有一个 arch,于是我把 $mirror 替换成 $mirror/$arch 但是还是报错(https://mirrors.163.com/cygwin//setup.bz2),应该是 arch 变量不存在所致。

我并不会弄 bash,这个问题只能留着以后解决了。

上海交大的安装源应该不会存在路径的问题,因为下面没有分 CPU 架构目录:

https://ftp.sjtu.edu.cn/cygwin/