[Python] 標準串流控制(STD-IN、STD-OUT、STD-ERR)

標準串流(Standard Streams) 是作業系統底層的一個資料交換機制,各個 process 處理資料時皆需要透過它進行輸入與輸出資料,舉凡讀取檔案、寫入檔案或鍵盤輸入等都是。在程式開發上雖然各種語言都已經把這層的處理給包裝起來,已經可以應付日常大部分的用途,但有些需求下還是需要直接操作標準串流才能達成(尤其是開發 CLI Utility)。

在 Python 操作標準串流

# 操作標準串流需要透過 sys package,在程式的開頭先 import 進來
import sys

# 讀取單行
sys.stdin.readline()

# 讀取多行
sys.stdin.readlines()

# 迴圈讀取
for line in sys.stdin:
    print(line)

# 將標準輸出從 console 轉到 stdout.log
fh_stdout = open('stdout.log', 'w')
sys.stdout = fh_stdout

# 輸出字串,但是不會在 console 顯示,而是被寫到 stdout.log 這個檔案
print('Test output to ./stdout.log')

# 將標準輸出從 console 轉到 stderr.log
fh_stderr = open('stderr.log', 'w')
sys.stderr = fh_stderr

# 使用 raise 拋出一個 RuntimeError,錯誤訊息會被寫入到 stderr.log
raise RuntimeError('test stderr')

References

30.1. sys — System-specific parameters and functions — Python 3.7.0 documentation

How do you read from stdin in Python? – Stack Overflow

發表留言

[PHP] 序列化資料線上編輯器

PHP 可以透過 serialize() 將物件轉換成序列化文字資料後儲存在任何地方,需要使用的時候再透過 unserialize() 進行反序列化後得到原始物件,但因為序列化資料會記錄資料長度,因此如果想直接修改序列化資料的內容,需要連同資料長度也一起算進去,手動修改時麻煩且容易出錯。這時候可以透過 Serialized PHP Editor  這個 PHP 序列化資料線上編輯器進行修改就會方便很多。

Read more “[PHP] 序列化資料線上編輯器”

發表留言

[Python] Django – “no module named django.core.management”

利用 django-admin.py 建立一個新專案後,準備要在專案目錄底下用 manage.py 開始做事情時,出現了詭異的錯誤訊息:

$ python manage.py
Traceback (most recent call last):
  File "manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

 

錯誤訊息中的大意是找不到 django.core.management 這個 module,利用下面的指令檢查一下 module source:

$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.7/site-packages

Read more “[Python] Django – “no module named django.core.management””

發表留言