python可变参数与正式输出的重定位,Linux标准输入输出

发布时间:2019-03-09  栏目:威尼斯人平台  评论:0 Comments

威尼斯人平台 ,布局参数

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

翻看完整参数>>

Linux标准输入输出

linux运维后,会暗中同意打开二个文本描述符,分别是:标准输入standard input
0,正确输出standard output 1,错误输出:error output 2

 

从此现在打开文件后。新增文件绑定描述符 能够依次扩大。
一条shell命令执行,都会接二连三父进度的文本讲述符。因此,全数运转的shell命令,都会有默许二个文件讲述符。

 

三个指令执行了:

 

先有一个输入:输入能够从键盘,也可以从文件获得

 

命令执行到位:成功了,会把成功结果输出到荧屏: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

 

笔录一段代码。

 

 

 1 #!/bin/sh

 2 # 检查脚本的运维参数,即便参数不等于两个,则脱离脚本

 3 if [ python可变参数与正式输出的重定位,Linux标准输入输出。! $# -eq 2 ]; then

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

 5 exit

 6 fi

 7 #实施代码

 8 echo “Para1: $0 ”  #所推行的脚本名称

 9 echo “Para2: $1 ”  #所实施的本子第②个参数

10 echo “Para3: $2 ”  #所执行的脚本第③个参数

11 echo “Para4: $3 ”  #所进行的剧本第伍个参数

12 echo “Para10: ${10} ”  #所举办的剧本第八个参数

13 echo “Para11: ${11} ”  #所实施的本子第9八个参数

14 echo “Para5: $# ”  #所执行的脚本参数个数

15 echo “Para6: $? ”
 #上3个代码或许shell程序在shell中退出的状态,若是符合规律退出则重临0,反之为非0值

16 echo “Para7:
[email protected] ”
 #传送给脚本参数列表,使用空格分隔每种参数,组成贰个字符串

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
把标准输出重定向到贰个文本中(追加)

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

Command > filename 2>&1
把标准输出和谬误一起重定向到三个文本中
能够把2>&1驾驭为二个参数(2&1),为了转义,&前加>

Command 2 > filename
把规范错误重定向到叁个文件中

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

Command >> filename2>&1
把规范输出和错误一起重定向到3个文书(追加)

  • 输入重定向:

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

Command < filename
Command命令以filename文件作为专业输入

Command << delimiter
从行业内部输入中读入,直到遇见delimiter分界符

 

绑定重定向

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

Command < &-
闭馆标准输入

Command 0>&-
同上

 那得益与python的“可变参数”,在Python里,可以采用*和**来设置可变参数,它们的分别是*传送1个参数元组,**传送三个参数字典,二者能够而且混合使用。混合使用时要加些小心,因为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)。
  • 诚如因为单元测试耗时时刻长,小编会选择把测试进度后台运营,并把结果放在1个一定的文本中
    例如: 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只接受那二个没有放进来的其他任何参数。没有那么些顺序,当您调用1个暗含地方参数的函数,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’

   
注意这些例子的末梢几行,特别注意当传递二个元组作为可变参数时,是或不是要显式的传递关键字参数。因为python使用程序规则来扩充过量的参数,那地点参数要放在前方。这几个事例中,最终五个调用是均等的,python无法说了算10分值是给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的输出,让输出的每一行前扩大3个时日的显示:

 代码如下

 

    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.”

留下评论

网站地图xml地图