最近在写一个Python小程序,需要移植到windows上,遇到了几个小问题,记录一下。
可以使用sys.platform判断系统类型
ossaudiodev在Windows下不可用,用PyAudio替代
Windows在使用open打开文件时会区别'rb'和'r',而Linux的'r'和'rb'是等价的。因此在Windows下打开二进制文件必须用'rb'模式
Windows7下的Python在读取用户给定的中文路径时会出错,要先把路径转换到unicode,可以使用uni_path = unicode(path, "utf8")
PyGTK写的程序会变得很丑,暂时还不知道怎么解决。以后改用PySide好了
在Windows下最好把Python安装目录放到PATH环境变量里,这样比较方便用pip
Wednesday, March 25, 2015
Saturday, March 7, 2015
Gnome 3.14添加自动启动
Labels:
Linux
Fedora21已经找不到gnome-session-properties了,虽然gnome-tweak-tools提供了添加子启动程序的功能,不过相当鸡肋。最后找到一个方法可以实现原来gnome-session-properties的功能
在~/.config/autostart/下新建一个xxx.desktop文件,内容如下:
要注意的是,Exec后面必须是程序的完整路径。
真心想吐槽Gnome,怎么越改越麻烦了。
在~/.config/autostart/下新建一个xxx.desktop文件,内容如下:
[Desktop Entry] Type=Application Name=xscreensaver-autostart Comment=Autostart xscreensaver Exec=/usr/libexec/xscreensaver-autostart Terminal=false X-Desktop-File-Install-Version=0.22
X-GNOME-Autostart-enabled=true
OnlyShowIn=GNOME;
要注意的是,Exec后面必须是程序的完整路径。
真心想吐槽Gnome,怎么越改越麻烦了。
Wednesday, March 4, 2015
Python学习笔记之subprocess
Labels:
Python
Python提供了一个库,subprocess,可以很方便地启动一个子进程并与之交互。
最简单的使用方式是:
subprocess.call(args),其中的args是a list of strings,args[0]是调用的程序路径,其后均为参数。call会阻塞直到子进程结束。call的返回值是子进程的返回值。这个函数与C的system很相似。
subprocess.check_output(args)与call相似,不过它会把子进程的输出作为一个bytestring返回
这个库最强大的函数是Popen,它其实是一个类的Constructer,完整形式是:
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
args与上文相同,不过这个调用不会阻塞当前进程,stdin,stdout,stderr可以是一个打开的file,或者是subprocess.PIPE,如果是PIPE,父进程可以用xxx.stdin/stderr/stdout与子进程通信。
其实呢,上述这些函数都是C的fork和execve的包装,它们大大简化了编程。如果要在C下实现Popen的功能,父进程需要现用pipe获得一个管道,然后fork,在子进程中关闭管道写端,用dup2重定向管道到stdin,接着execve,在父进程中需要关闭管道读端,然后向子进程输入数据,这些代码少说也要个5行。
现在觉得Python的官方库文档已经很完善了,而且不要翻墙,以后估计就不再写官方库的学习笔记了
最简单的使用方式是:
subprocess.call(args),其中的args是a list of strings,args[0]是调用的程序路径,其后均为参数。call会阻塞直到子进程结束。call的返回值是子进程的返回值。这个函数与C的system很相似。
subprocess.check_output(args)与call相似,不过它会把子进程的输出作为一个bytestring返回
这个库最强大的函数是Popen,它其实是一个类的Constructer,完整形式是:
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
args与上文相同,不过这个调用不会阻塞当前进程,stdin,stdout,stderr可以是一个打开的file,或者是subprocess.PIPE,如果是PIPE,父进程可以用xxx.stdin/stderr/stdout与子进程通信。
其实呢,上述这些函数都是C的fork和execve的包装,它们大大简化了编程。如果要在C下实现Popen的功能,父进程需要现用pipe获得一个管道,然后fork,在子进程中关闭管道写端,用dup2重定向管道到stdin,接着execve,在父进程中需要关闭管道读端,然后向子进程输入数据,这些代码少说也要个5行。
现在觉得Python的官方库文档已经很完善了,而且不要翻墙,以后估计就不再写官方库的学习笔记了
Subscribe to:
Posts (Atom)