Shell: expect – 自动交互脚本, linux 自动化, shell自动化, expect教程中文版:expect实例

启用选项 -c:执行脚本前先执行的命令,可多次使用。 -d:debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。 -D:启用交换调式器,可设一整数参数。 -f:从文件读取命令,仅用于使用#!时。如果文件名为”-“,则从stdin读取(使用”./-“从文件名为-的文件读取)。 -i:交互式输入命令,使用”exit”或”EOF”退出输入状态。 --:标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --。 -v:显示expect版本信息。 常用命令 # 命令行参数 # $argv,参数数组,使用[lindex $argv n]获取,$argv 0为脚本名字 # $argc,参数个数… Read More

Shell: expect – 自动交互脚本, linux 自动化, shell自动化, expect教程中文版:expect说明

样式匹配 *号 expect "hi*" send "$expect_out(0,string) $expect_out(buffer)" 输入philosophic,输出为hilosophic philosophic,hi*匹配的是hilosophic 如果是hi*hi,则匹配的是hilosophi 如果是*hi*,则匹配的是philosop hi c\n ,而不是p hi losophic\n,因为匹配是从左到右进行,且*尽可能匹配更多的字符,但是要符合样式,所以第一个*匹配的字符多一些 以*开头的样式并不经常用到,像*hi*,它能把前面不匹配的数据保存在expect_out(0,string),但是expect_out(buffer)中也会保存,所以这点也没什么意义 以*结尾的样式经常需要认真考虑,因为程序的输出不像人的标准输入一样是一行一行而是一堆一堆进行,这样可能匹配的最多数据还没发送完,程序已经返回了。因为*可以匹配任何东西,包括空字符串,可以用它做结尾匹配人的一些输入,并清理输入缓存。 例子: expect… Read More

Shell: expect – 自动交互脚本, linux 自动化, shell自动化, expect教程中文版

摘要 现代的Shell对程序提供了最小限度的控制(开始,停止,等等),而把交互的特性留给了用户。这意味着有些程序,你不能非交互的运行,比如说 passwd。有一些程序可以非交互的运行,但在很大程度上丧失了灵活性,比如说fsck。这表明Unix的工具构造逻辑开始出现问题。Expect恰恰 填补了其中的一些裂痕,解决了在Unix环境中长期存在着的一些问题。 Expect使用Tcl作为语言核心。不仅如此,不管程序是交互和还是非交互的,Expect都能运用。这是一个小语言和Unix的其他工具配合起来产生强大功能的经典例子。 本部分教程并不是有关Expect的实现,而是关于Expect语言本身的使用,这主要也是通过不同的脚本描述例子来体现。其中的几个例子还例证了Expect的几个新特征。 关键字 Expect,交互,POSIX,程序化的对话,Shell,Tcl,Unix; 简介 一个叫做fsck的Unix文件系统检查程序,可以从Shell里面用-y或者-n选项来执行。在手册[1]里面,-y选项的定义是象这样的: 对于fsck的所有问题都假定一个“yes”响应;在这样使用的时候,必须特别的小心,因为它实际上允许程序无条件的继续运行,即使是遇到了一些非常严重的错误。 相比之下,-n选项就安全的多,但它实际上几乎一点用都没有。这种接口非常的糟糕,但是却有许多的程序都是这种风格。文件传输程序ftp有一个选项可以禁止交互式的提问,以便能从一个脚本里面运行。但一旦发生了错误,它没有提供的处理措施。 Expect是一个控制交互式程序的工具。他解决了fsck的问题,用非交互的方式实现了所有交互式的功能。Expect不是特别为fsck设计的,它也能进行类似ftp的出错处理。 fsck和ftp的问题向我们展示了象sh,csh和别的一些shell提供的用户接口的局限性。Shell没有提供从一个程序读和象一个程序写的功 能。这意味着shell可以运行fsck但只能以牺牲一部分fsck的灵活性做代价。有一些程序根本就不能被执行。比如说,如果没有一个用户接口交互式的提供输入,就没法运行下去。其他还有象Telnet,crypt,su,rlogin等程序无法在shell脚本里面自动执行。还有很多其他的应用程序在 设计是也是要求用户输入的。 Expect被设计成专门针和交互式程序的交互。一个Expect程序员可以写一个脚本来描述程序和用户的对话。接着Expect程序可以非交互的运行“交互式”的程序。写交互式程序的脚本和写非交互式程序的脚本一样简单。Expect还可以用于对对话的一 部分进行自动化,因为程序的控制可以在键盘和脚本之间进行切换。 bes[2]里面有详细的描述。简单的说,脚本是用一种解释性语言写的。(也有C和C++的Expect库可供使用,但这超出了本文的范围).Expect提供了创建交互式进程和读写它们的输入和输出的命令。Expect是由于它的一个同名的命令而命名的。 Expect综述… Read More

AI机器学习: 在 macOS 上安装谷歌的TensorFlow, machine learning, 人工智能学习

在 macOS 上安装 TensorFlow 本指南将介绍如何在 macOS 上安装 TensorFlow。虽然这些指令可能也适用于其他 macOS 版本,但我们只在满足以下要求的计算机上对这些指令进行过测试(并仅支持这些指令): macOS 10.12.6 (Sierra) 或更高版本 注意:GitHub#15933 中介绍了在低于 macOS 10.12.6 (Sierra) 的版本上已知的一些影响准确率的数值问题。… Read More

AI机器学习: 在 Windows 上安装谷歌的TensorFlow, machine learning, 人工智能学习

在 Windows 上安装 TensorFlow 本指南将介绍如何在 Windows 上安装 TensorFlow。虽然这些说明可能也适用于其他 Windows 版本,但我们只在满足以下要求的计算机上验证过这些说明(而且我们只支持在此类计算机上按这些说明操作): 64 位、x86 台式机或笔记本电脑 Windows 7 或更高版本 确定要安装哪种 TensorFlow 您必须从以下 TensorFlow… Read More

AI机器学习: 在 Ubuntu 上安装谷歌的TensorFlow, machine learning, 人工智能学习

  本指南将介绍如何在 Ubuntu 上安装 TensorFlow。虽然这些说明可能也适用于其他 Linux 版本,但我们只在满足以下要求的计算机上验证过这些说明(而且我们只支持在此类计算机上按这些说明操作): 64 位台式机或笔记本电脑 Ubuntu 16.04 或更高版本 确定要安装哪种 TensorFlow 您必须从以下 TensorFlow 类型中选择其一来进行安装: 仅支持 CPU 的… Read More

Ubuntu:为Python3安装 pip3, 绑定 pip3到 python3, How to install pip for Python 3.6 on Ubuntu 16.10?

  首先通过以下命令查看 Python 的版本 python -V 关于切换 Python 默认版本,可以参考文章:转换Python默认版本 安装 pip3,很多时候,你会发现,自己已经安装了,但是系统会提示没有这个命令,例如: sudo pip3 install virtualenv sudo: pip3: command not found… Read More

Linux: chattr 、lsattr 命令详解, 防止文件被删除, 添加修改文件属性, 禁止删除或只能追加内容

有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。 什么?文件还有隐藏属性?光是那九个权限就快要疯掉了,竟然还有隐藏属性,真是要命~ 但是没办法,就是有文件的隐藏属性存在啊!不过,这些隐藏的属性确实对於系统有很大的帮助的~ 尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr命令只能在Ext2/Ext3的文件系统上面生效, 其他的文件系统可能就无法支持这个命令了。底下我们就来谈一谈如何配置与检查这些隐藏的属性吧! 这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。 chattr 命令 chattr – 改变 Linux 文件系统中的文件属性(change file attributes on a Linux… Read More

PHP: 修改post 数组容量, 修改post变量容量, max_input_vars默认值为1000导致多表单提交失败

今天接到客服部工作人员反馈的一个客户的问题,产品是允许用户添加一个产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。 起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。 修改php.ini中的max_input_vars参数限制提交的表单数量 比如phpmysqladmin读取数据库表,然后写入编辑,但是数据库字段有128个,然后每个字段有11个input框,大概有1400多个input,而ax_input_vars默认值为1000. 修改php.ini里面加入max_input_vars ;;;;;;;;;;;;;;;;;;; ; Resource Limits ; ;;;;;;;;;;;;;;;;;;; max_execution_time = 30 //每个脚本的最大执行时间,以秒为单位 max_input_time = 60 //每个脚本解析请求的数据可能花费的最大时间,以秒为单位… Read More