重定向

重定向

熟悉幾個特殊符號:python

< :輸入重定向
> :輸出重定向
>> :輸出重定向,進行追加,不會覆蓋以前內容
<< :標準輸入來自命令行的一對分隔號的中間內容.

示例:shell

1.cat >file 記錄的是鍵盤輸入,至關於從鍵盤建立文件,而且只能建立新文件,不能編輯已有文件.>是數據重導向,會將你輸入的文本內容輸出到file中.

 cat >file <

 兩條命令結合起來使用,既記錄了鍵盤輸入內容,同時又規定告終束符號以內的內容的範圍
 xargs -n 1 < qqq



 <<EOF就是告訴shell腳本如今開始執行命令,當遇到EOF的時候結束命令。

 !跟命令指上一次的命令

而後是 1>、 2>、 1>>、 2>>的使用,命令行

當咱們須要把一個文件正確的輸出,和錯誤的輸出分開保存的時候就能用到他們啦。讓我用一個簡單的python腳原本作一個實驗code

if __name__ == '__main__':
    print 'gogogog'
    int('qiowjeioqwjeo')

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> right.txt 2> wrong.txt
(thrift_rpc)piperck➜  py_pra  ᐅ  ls
NS8A_client       gevent            pp.py             starcraft2
baidu_phoneassist laplace_pra       right.txt         wrong.txt
(thrift_rpc)piperck➜  py_pra  ᐅ  cat right.txt
gogogog
(thrift_rpc)piperck➜  py_pra  ᐅ  cat wrong.txt
Traceback (most recent call last):
  File "pp.py", line 6, in <module>
    int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

能夠看到,正確的輸出被保存進了right.txt 而錯誤的輸出被重定向到了wrong.txt 。ip

那麼若是咱們不區分1>2>這樣的重定向規則,運行結果會被保存成什麼樣子呢?rpc

[root@hbl_test houbinglei]# python test.py > log.txt
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    func()
  File "test.py", line 3, in func
    int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
[root@hbl_test houbinglei]# cat log.txt 
111

那若是咱們想讓錯誤和正確的結果都被重定向到同一個文件又應該怎麼作呢。it

[root@hbl_test houbinglei]# python test.py 1 > log.txt 2>&1
[root@hbl_test houbinglei]# cat log.txt 
111
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    func()
  File "test.py", line 3, in func
    int("abc")
ValueError: invalid literal for int() with base 10: 'abc'

若是咱們想將錯誤的和正確的信息重定向追加到同一個文件應該怎麼作呢?你可能會想到2>>&1。。。然而現實是,並無這個語法。pip

然而咱們卻能夠使用1>>pp.txt 2>&1的語法實現這個功能io

echo "asd" &>> a.txt &>>就是1跟2 都輸入到a.txtevent

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>> pp.txt 2>&1
(thrift_rpc)piperck➜  py_pra  ᐅ  cat pp.txt
gogogog
gogogog
Traceback (most recent call last):
  File "pp.py", line 6, in <module>
    int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
gogogog
Traceback (most recent call last):
  File "pp.py", line 6, in <module>
    int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

那麼若是咱們想保存正確的結果,錯誤的結果直接丟向垃圾站,既不保存爲文件,也不在標準輸出打印又該怎麼作呢?

(thrift_rpc)piperck➜ py_pra ᐅ python pp.py 1>>right.txt 2>/dev/null (thrift_rpc)piperck➜ py_pra ᐅ cat right.txt gogogog gogogog gogogog

相關文章
相關標籤/搜索