xy计算linux的正统输入标准输出,Linux标准输入输出

布局参数

  • 特色:金贝 55度 标准灯罩 金鹰 欧宝 银燕通用型标准罩

翻看完整参数>>

Linux标准输入输出

linux运行后,会暗许打开一个公文描述符,分别是:标准输入standard input
0,正确输出standard output 1,错误输出:error output 2

 

随后打开文件后。新增文件绑定描述符 可以依次扩展。
一条shell命令执行,都会一而再父进度的文本讲述符。因而,全部运行的shell命令,都会有暗许三个文件讲述符。

 

一个下令执行了:

 

先有3个输入:输入可以从键盘,也可以从文件拿到

 

命令执行到位:成功了,会把成功结果输出到屏幕:standard output专擅认同是显示屏

 

一声令下执行有荒唐:会把错误也出口到屏幕方面:standard error暗中认同也是指的屏幕

 

 

 

文本输入输出由追踪为一个加以的进度具有打开文件的平头句柄来成功。这么些数字值就是文件讲述符。最为人们所知的文本米描述符是
stdin, stdout
和stderr,文件讲述符的数字分别是0,1和2。那个数字和分级的装置是保留的。壹个指令执行前,先会准备好全体输入输出,默许分别绑定(stdin,stdout,stderr),倘诺这几个时候出现谬误,命令将终止,不会履行。命令解析进度,可以参考:Linux
Shell 通配符、元字符、转义符使用实例介绍

 

这么些暗许的出口,输入都以linux系统钦定的,大家在选用进度中,有时候并不期望执行结果输出到屏幕。作者想出口到文件或其余设备。那么些时候大家就须要展开输出重定向了。

 

linux shell下常用输入输出操作符是:

 

  1.  标准输入   (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin
    -> /proc/self/fd/0   0代表:/dev/stdin 

  2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout
    -> /proc/self/fd/1  1意味着:/dev/stdout

  3.  标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
    /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

 

记录一段代码。

 

 

6095.com , 1 #!/bin/sh

 2 # 检查脚本的运转参数,假设参数不对等多少个,则脱离脚本

 3 if [ ! $# -eq 2 ]; then

 4 echo "Usage: Need parameters! Run: $0 2015 10 02"

 5 exit

 6 fi

 7 #执行代码

xy计算linux的正统输入标准输出,Linux标准输入输出。 8 echo "Para1: $0 "  #所推行的脚本名称

 9 echo "Para2: $1 "  #所进行的剧本第③个参数

10 echo "Para3: $2 "  #所执行的本子第三个参数

11 echo "Para4: $3 "  #所推行的台本第多个参数

12 echo "Para10: ${10} "  #所进行的剧本第⑨一个参数

13 echo "Para11: ${11} "  #所执行的本子第⑨3个参数

14 echo "Para5: $# "  #所推行的台本参数个数

15 echo "Para6: $? "
 #上三个代码或许shell程序在shell中退出的情事,倘使平常退出则再次来到0,反之为非0值

16 echo "Para7:
[email protected] "
 #传递给脚本参数列表,使用空格分隔每一个参数,组成3个字符串

17 echo "Para8: $* "  #剧本参数列表,作为三个参数组,使用时加引号

18 echo "Para9: $$ "  #所实施脚本的脚下进度ID

19 echo "Para1: $- "  #突显Shell使用的方今增选,与set命令功用雷同。

20 echo "Para2: $! "  #后台运转的结尾个进程ID

 

 

 

Fetty:姓名、性别、年龄、具体工作不详,更无联系格局。
本身在网易发布的稿子(包涵但不避免:简体普通话、英文、标点符号、图像,以及上述任意组合等)均为敲打键盘、鼠标、屏幕等工具所造成结果,用于检验自身电脑、屏幕的各项机械质量、光电质量,并不意味自身观点,如有雷同,不胜荣幸!

linux运转后,会默许打开一个文本描述符,分别是:标准输入standard input
0,正确输出standard output 1,错误输出:error output 2 以...

在shell执行命令时,每一个进度都和两个打开的文本相挂钩,并动用文件讲述符来引用这几个文件。由于文件讲述符不不难记忆,shell同时也交给了对应的文本名:

用python的放置函数print时,大家会意识它是永葆任意多少个参数,也等于说,print的调用参数是不稳定的。例如:

文本&文件讲述符

  • 输入文件—标准输入
    0(缺省是键盘,为0时是文本恐怕其他命令的输出)

  • 输出文件—标准输出
    1(缺省是显示器,为1时是文本)

  • 破绽百出输出文件—标准错误
    2(缺省是显示器,为2时是文件)

  • 系统中实际上有拾个公文描述符,大家可以任意使用文件讲述符3到9.

print "你好"
print "我是",name
print "以往是", time , " 你在干什么吗", name , "!"

文本重定向:改变程序运营的输入来源和输出地点

  • 输出重定向:

Command > filename
把正规化输出重定向到三个新文件中

Command >> filename
把正规化输出重定向到2个文件中(追加)

Command > filename
把正规化输出重定向到3个文件中

Command > filename 2>&1
把正规化输出和谬误一起重定向到二个文件中
可以把2>&1精通为一个参数(2&1),为了转义,&前加>

Command 2 > filename
把正规化错误重定向到三个文件中

Command 2 >> filename
把正规化输出重定向到贰个文本中(追加)

Command >> filename2>&1
把正规化输出和谬误一起重定向到一个文件(追加)

  • 输入重定向:

Command < filename > filename2
Command命令以filename文件作为标准输入,以filename2文件作为专业输出

Command < filename
Command命令以filename文件作为规范输入

Command << delimiter
从正式输入中读入,直到遇见delimiter分界符

 

绑定重定向

Command >&m
把正规化输出重定向到文件讲述符m中

Command < &-
关门标准输入

Command 0>&-
同上

 那得益与python的“可变参数”,在Python里,可以运用*和**来安装可变参数,它们的界别是*传递壹个参数元组,**传递二个参数字典,二者可以同时混合使用。混合使用时要加些小心,因为python中他们的顺序是关键的。参数归为4类,不是独具的品类都亟需。他们不可能不按下边的次序定义,不用的可以跳过。
    1)必须的参数
    2)可选的参数
    3)过量的岗位参数
    4)过量的首要性字参数

shell重定向的一对常用用法

  • 重定向标准错误
    事例1:command 2>
    /dev/null假若command执行出错,将错误的新闻重定向到空设备
    事例2:command > out.put
    2>&1将command执行的专业输出和业内错误重定向到out.put(相当于说不管command执行科学照旧错误,输出都打印到out.put)。
  • 一般因为单元测试耗时岁月长,作者会选用把测试进程后台运营,并把结果放在壹个一定的文书中
    例如: nosetests tests/test_sys.py -v > ../nosetest.txt 2>&1
    只需求回头看那多少个文件结果即可

参考:
http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/
http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html
http://blog.csdn.net/flowingflying/article/details/5201199

def funName(a, b=None, *c, **d):

 

   
这一个顺序是必须的,因为*args和**kwargs只接受那么些从没放进来的任何任何参数。没有那么些程序,当您调用一个带有地方参数的函数,python就不知晓哪些值是已表明参数想要的,也不通晓哪位被当做过量参数相比较。
   
也要注意的是,当函数能接受广大务必的参数和可选的参数,那它只要定义一个压倒的参数类型即可。看上面的事例:

 代码如下

    def add(a, b, c):
        return a + b + c
    >>> add(1, 2, 3)
    6
    >>> add(a=4, b=5, c=6)
    15
    >>> args = (2, 3)
    >>> add(1, *args)
    6
    >>> kwargs={'b': 8, 'c': 9}
    >>> add(a=7, **kwargs)
    24
    >>> add(a=7, *args)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: add() got multiple values for keyword argument 'a'
    >>> add(1, 2, a=7)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: add() got multiple values for keyword argument 'a'

   
注意这几个事例的终极几行,尤其留意当传递1个元组作为可变参数时,是不是要显式的传递关键字参数。因为python使用程序规则来扩展过量的参数,这地方参数要放在面前。这几个事例中,最终多少个调用是同样的,python无法控制拾分值是给a的。

    上面举多个例证来模拟print的兑现:

 代码如下

    >>> import sys
    >>> def myprint(*argv):
        sys.stdout.write(" ".join([str(i) for i in argv]) + "n")
    >>> print "I believe", 2012, "is the end of the world."
    I believe 2012 is the end of the world.
    >>> myprint("I believe", 2012, "is the end of the
world.")
    I believe 2012 is the end of the world.
    >>> print "tuple:", (1, 2, 3), "list:", [1, 2, 3],
"dict:", {"begin":-2012, "end":2012}
    tuple: (1, 2, 3) list: [1, 2, 3] dict: {'begin': -2012, 'end':
2012}
    >>> myprint("tuple:", (1, 2, 3), "list:", [1, 2, 3],
"dict:", {"begin":-2012, "end":2012})
    tuple: (1, 2, 3) list: [1, 2, 3] dict: {'begin': -2012, 'end':
2012}

   
print默许是出口到stdout中,在极端运维的次序,无重定向的情事下,print输出到控制台。如若要做代码里已毕把print的出口写入到log文件中,可以通过修改stdout的文件对象来落实。同理,重平昔标准输入和正规错误输出分别修改stdin和stderr的公文对象即可。
    下边的事例捕捉全部print的输出,让输出的每一行前增添多少个光阴的来得:

 代码如下

 

    import sys, time
    class MyOutput():
        def __init__(self, fd):
            self.formatTime()
            self.out = fd
            self.newLine = True
        def formatTime(self):
            return time.strftime("%H:%M:%S  ", time.localtime())
        def write(self, s):
            if self.newLine:
                self.out.write(self.formatTime())
                self.newLine = False
            self.out.write(s)
            if s.endswith("n"):
                self.newLine = True
        def flush(self):
            self.out.flush()
    sys.stdout = MyOutput(sys.stdout)
    print "Program begin."
    mylist = [5, 4, 3, 2, 1]
    print "prev:  ", mylist
    mylist.sort()
    print "after: ", mylist
    time.sleep(3)
    print "Program end."

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。