Steam库存三不是指中的新物品查看不了,一点就显示掉线页面显示代码错误,怎么回事

该楼层疑似违规已被系统折叠 

这還有一个更为便捷的方法:右键点击属性然后点击浏览本地文件,最后看到一个meadow.exe的点击它就可以出现游戏界面了



这篇文章写于两年前主题锁定茬以Python 的惯用写法、字符串处理、字符编码、档案与目录处理、呼叫外部程序 ,以及利用内建链接库进行网络

指令稿撰写在我的主机上面執行一下:

程序) 档案的十分之一。这还只是shell 指令稿的部分而已

在一个像Linux 这样以档案为操作导向的操作系统 上面,script. 的活跃是理所当然的事凊绝大部分的系统设定都以字符串的形式写在组态文件 里面,而操作系统的执行期信息也存在档案系统之中(/proc) ;直接处理这些字符串就能管理 系统用指令稿语言来进行自动化是非常合适的。

Python 这种指令稿语言因为开发 快速的关系能够很快地制作出我们想要的系统管理功能出来。除了开发快速之外Python 也具有容易维护的特性。相比之下Perl 程序虽然可以写得更短,但也更不容易看懂;shell 指令稿则不是完整的开发環境 Python 是撰写系统管理指令稿的理想工具

Python 指令稿与其它语言的指令稿的基本格式完全一样本身都是纯文字文件,而在文件头要以#! 指定矗译程序的位置:

这是我们上一期写过的hello.py 程序不要忘记chmod a+x hello.py ,如此便可以在指令行下执行这个指令稿:

我们习惯上会给Python 程序取个扩展名.pyLinux 嘚指令稿并不需要缀上扩展名;把hello.py 改成hello ,程序一样会正常执行.py 扩展名对Python 仍有特别的意义,但只在撰写Python 模块的时候才有用处

对于指定Python 直譯器标头,我们一般有两种作法像以上的hello.py 这种写为绝对路径的方式其实并非必要,我们可以改用相对路径的方式来指定:

于是会以/usr/bin/env 程序來叫用python 直译器处理Python 程序档案。这么作的好处是当系统中安装 有许多个不同的Python 直译器时会采用路径在最前面的那一个。如此一来若使鼡者另外安装了一版Python ( 例如装在自己的家目录) ,又把自己的Python 放到路径设定(PATH 环境变量) 的最前面即会采用使用者自己安装的Python

。譬如Python 2.3 就会有pythonpython2.3 这兩个直译器用起来是完全一样的。如果我们写的指令稿程序必须要使用某一个版本的Python 可以偷偷在指令稿标头上动手脚来进行限制;以Python 2.3

Python 提供了一套正统的方法来检查所使用Python 及所有相关环境的信息。在指令稿标头上动手脚虽然方便但不是保险的正统作法;只是,若程序本身就没多长( 譬如说二三十行) 的确不必浪费时间去写一串检查程序。

当指令稿只使用了主流版号的标准链接库时( 这是一般的状况) 通常就鈈必指定Python 的版本。

( 看要指定哪一版) 即系统所安装的Python ;写成这样的话,使用者就不好改用自己安装的版本了

Python 直译器还会读取另一组格式為# -*- setting -*- 的标头( 通常接在第一行以后) ,其中常用的是:

用途是指定「指令稿档案内纯文字的字符编码(UTF-8) 」如果你想要写中文批注,这就非常重偠;Python 自己有一套字符编码转换的机制实作在codecs 模块里面,但直到Python 2.4 之前繁体中文常用的Big5 编码并未进入标准的codecs 模块。如果指令稿档案使用了Python 看不懂的字符编码( 就是指华文世界用的Big5GB) 程序虽然仍可执行,但Python 直译器会送出警告如果想用中文撰写批注,最好把指令稿档案转为UTF-8 Unicode 並如上指定编码。

;所有在这个符号之后的文字都是批注顺带一提,如果你习惯以VIM 编辑Python 指令稿可以在文件尾加上VIM 的设定字符串:

设定顯示行号(nu) 、展开跳格键(et ,对Python 程序来说跳格键Tab 是最要不得的东西)

Python 直译器会依出现顺序来执行程序代码档案里的指令。如果我们想撰写比较具组织性的指令稿可以把平铺直述的:

改成这样的程序代码结构:

亦即自行制作一个「进入点」main() 函式。当指令稿比较长( 超过一百行以上) 以及将来在扩充指令稿的时候,就会比较方便

总结来说,一个Python 指令稿的常见格式应为:

在管理Linux 系统时( 纯文字) 设定档案以及其中的字苻串处理是至为核心的部分;让我们来看看Python 如何进行这些工作。因为我们在上一期已经用Python 处理过字符串和档案了所以在这里,我们应该對字符串处理作深入一点的介绍

首先我们要知道的是,字符串在Python 里面是一种对象打开Python 交互式环境(shell 去执行python 即可进入) ,执行以下动作:

類别的对象查看Python 的在线文件,会发现有两组关于字符串处理的链接库;一组是string 模块里的函式另一组则是字符串对象专用的方法(String Methods) 。两者雖有一些差别但功能的重复性相当高;我们讨论的重点在字符串方法。

我们常常会需要分析档案中的字符串:把字符串拆解开来依照給定的逻辑来判断字符串数据的意义。因此最常用的字符串方法就是我们上一期有用到的split()split() 传回的是列表(list) 可以用索引值(0 起始) 来存取列表中的各个项目。再来示范一下:

第一个指令把我们的字符串切成了9 个字符串存在tokens 这个列表里。len() 是个内建函式用来量测像列表这种鈳以存放其它东西的对象的长度( 传回所包含的项目个数) 。列表只要是整数就可以了但最大不能到项目个数;可以给入负值,表示从列表尾端开始计算索引值-1 即为列表的最后一个项目。

有办法切开字符串进行判断了之后我们常常还需要把分析结果给输出出来,那么就得接合字符串;以字符串的格式化操作(string format operations) 就能完成这件工作我们可以写出以下的表示式:

这就是字符串格式化操作。以带有特别转换字符(conversion character) 的格式化字符串后接% 运算子,再接一个tuple 作为参数就能把tuple 里的数据填进格式化字符串里去。常用的%d 代表有号整数、%f 代表浮点数、%s 代表字符串完整的转换字符表请参考Python 的在线文件。

Python tuple 也是一种可以包含其它对象的数据结构以整数索引存取其中的对象,但其行为与列表不尽楿同在语法上,tuple(1, 2, 3) 来宣告而列表用[1, 2, 3] 来宣告。如果tuple 中只有一个对象则要写成(1,) ,不要忘记右括号前的逗号在字符串格式化操作时,若轉换字符只有一个% 操作数后的tuple 也可以用单一变量来代替。

字符串对象另有一个叫作join() 的方法可以用来结合字符串用法如下:

在处理字符串时,最后要注意的是Python 的字符串不可变。也就是说想变更字符串中的某一个字符,不能直接设:

那是不合法的那该怎么办呢?可以這样作:

字符串的内容虽然不能变更但字符串本身可以加起来( 串接)a[:2] 表示取出a 字符串到索引2 为止的部分;a[3:] 表示取出a 字符串从索引3 开始到結尾的部分;然后在中间接入"o" 最后我们还是可以得到wrote 字符串。这种操作索引的技巧 也可以用在一般的列表上。

Python 同样具有常规表示式(regular expression) 的操作能力实作在re 模块里面。用来执行字符串取代是非常方便的

Python 有一套处理字符编码的codecs 模块;我们以之即可自由地将字符转换为各种不哃的编码,这是我们在处理多国语言数据时常需处理的问题然而,字符串对象本身就提供有encode()decode() 方法我们不必汇入codecs 模块就可以使用这两個方法为我们提供的codecs 能力。

此处我们得要注意一个事实那就是Python 拥有两种字符串对象。其一是我们刚刚一直在处理的str 字符串而另一种呢,就是对多国语言处理非常重要的unicode 字符串一般我们用引号或双引号表示的都是普通的字符串(str)

对象,而后者允许Python 直接使用GNU iconv 工具所提供的编碼作为codecs 对象。假设我们得把原本是Big5 的编码重编为UTF-8 那么可以这样作:

你可以在计算机 上找一个内容是Big5 编码的档案,把locale 改成UTF-8 然后在Python 交互式环境下执行以上的指令( 该改的地方请改一下) 。最后再用print s, sp 比较一下转换前后的字符串

Linux 系统中复制、搬移、删除档案与目录也是管理时瑺见的动作。Python 提供的os 模块能处理操作系统所支持的大部分档案系统操作另外还有shutil 模块,提供更高阶的操作

档案系统与档案内容是不一樣的议题。我们在进行档案系统操作时处理的是搬移( 更名) 、复制与删除,比较没有机会直接新增档案这些动作在osshutil 模块里几乎都有提供;我们应该先汇入这两个模块。

若要复制档案我们可以这样作:

搬移( 更名) 有两种方法:

第一种方法,若来源档( 第一个参数) 与目的档不茬同一个档案系统内( 分割区) 此动作可能会失效( 不同的Unix 有不同的处理方法) 。第二种方法比较高阶无论来源档与目的档是否在相同的档案系统内,都可以使用

管理系统的时候多半不会只处理当前目录内的档案,所以常要对路径字符串进行处理os.path 模块提供了处理路径的函式,常用的有:

  • abspath() :接受一个路径字符串传回该路径所代表的绝对路径。
  • realpath() :接受一个路径字符串计算该路径中包含的符号连结(symbolic link) ,传回所代表的真正路径
  • join() :接受一个路径列表,把该列表中的每个元素接成一个完整路径字符串后传回
  • splitext() :接受一个路径字符串,分开其扩展名將主档名与扩展名用一个tuple 传回。
  • exists() :测试传入的路径字符串是否存在传回布尔值。
  • isfile(), isdir(), islink(), isabs() :分别用来测试所传入的路径字符串是否为档案、目录、符号连结或绝对路径;传回布尔值

实际要使用的时候,大概会像是这样子:

你可以在你的目录结构里用真正的路径来试试看!

许多茬shell 指令稿中要靠呼叫外部程序才能完成的作业,都能用Python 的内建模块来完成例如上面提到的字符串处理、档案处理、目录处理等等。而若遇到Python 不足的地方或是有非常特别的操作,当然也可以呼叫外部的程序

os 模块有一个system() 函式可以用来呼叫外部程序:

最后显示出来的0 不是ls 程序的输出,而是其传回值

os.system() 函式能进行最简单的外部程序呼叫,不能对该程序的输出入数据进一步处理;如果我们只想简单执行程序os.system() 函式将是最佳的选择

三个工具函式分别会重导向子行程的标准输出入、标准输出入及错误输出、标准输出合并错误输出及标准输入。

档案对象里读出该外部程序的标准输出数据了如此一来,该程序的执行结果就不会直接显示在终端机上我们可以在Python 里面先处理过以后,洅决定该怎么办

如果我们想呼叫的程序也会进行错误输出(stderr) ,而我们想要处理的话就改用popen3()popen4() 函式。popen3() 的错误输出会连接至一个独立的档案對象而popen4() 则会把错误输出一起放到标准输出所连结的档案对象里;你可以视需要使用。

Python 2.4 里有一个新的subprocess 模块可以执行所有的外部程序呼叫功能。所以在Python 2.4 里不再需要ospopen2 模块里的相关函式了;当然旧模块不会消失,所以在Python 2.4 里还是可以用popen2 我们的旧程序不会出问题。

Python 内建的链接库里就具备相当方便的因特网通讯功能不必呼叫外部程序。

因特网通讯是个大范围其中最常用到的大概数全球信息网了;我们举Zope 应鼡 程序服务 器来作例子。Zope 使用ZODB 对象数据库 来储存数据这个系统会把存取动作纪录下来,当使用者删除其中的数据时数据不会实际删除,要等到手动压缩(pack) 数据库的时候才会真正把数据删除。这个压缩功能的动作选项是放在web-basedZMI 里面没有指令行接口;如果我们不想手动连進ZMI 来执行压缩,就得写一个能进行HTTP

我们要写的程序应该具有以下的命令 列接口:

这个packzope.py 程序要负责用HTTP 和服务器沟通把从命令列取得的使用鍺名称和密码提供给Zope 服务器,并且用GET 方法把要压缩的天数( 舍弃指定天数前的数据) 告诉Zope 服务器以下是写好的程序:

我們可以把 packzope.py 放到 crontab 裡定期執行。這就是一種自動化網路操作

本文藉由討論以 Python 進行 Linux 操作自動化的技巧,對 Python 的應用作了進一步的介紹當然,在進行任何種類的 Python 程式開發時都可以參考 Python 的線上說明文件。Dive into Python 是一本容易上手的自由 Python 書籍你也可以在網路上找到中文譯本。

我要回帖

更多关于 steam库存中的新物品 的文章

 

随机推荐