python 3はsubprocessモジュールを介してスクリプトを呼び出し、スクリプトと対話する
2286 ワード
仕事の必要に応じて、問題のような機能を実現する必要があります.ネット上のブログを見ると、資料の多くはpython 2向けで、しかも不明なところが多いので、自分で調べた結果を整理して、ブログを書き直しました.
1、python 3のデフォルト文字列タイプ
Python 2.xはASCIIとUnicode文字列を同時にサポートし、デフォルトではASCII符号化である.Python 3では、Unicodeがデフォルトタイプになり、ASCII文字列がbytesと呼ばれています.bytesデータ構造にはバイト値が含まれており、データを含む可変バイト配列であるため、文字列と見なすべきではありません.
上の言葉は「pythonコアプログラミング」(第3版)から出ています.これはpython 2とpython 3の大きな互換性をもたらした.多くの方法はpython 2で使用できますが、python 3では使用できません.幸いなことにpythonはこの問題を解決する方法を提供した.
デフォルト文字列をbytesタイプに変換するには、UnicodeをASCIIに変更します.
bytes文字列をUnicodeタイプに変換したい場合
2、sysモジュールのstdout,stdin,stderr*
ファイルを作成します.py
ファイルを作成するpy,
予備知識
1、python 3のデフォルト文字列タイプ
Python 2.xはASCIIとUnicode文字列を同時にサポートし、デフォルトではASCII符号化である.Python 3では、Unicodeがデフォルトタイプになり、ASCII文字列がbytesと呼ばれています.bytesデータ構造にはバイト値が含まれており、データを含む可変バイト配列であるため、文字列と見なすべきではありません.
上の言葉は「pythonコアプログラミング」(第3版)から出ています.これはpython 2とpython 3の大きな互換性をもたらした.多くの方法はpython 2で使用できますが、python 3では使用できません.幸いなことにpythonはこの問題を解決する方法を提供した.
デフォルト文字列をbytesタイプに変換するには、UnicodeをASCIIに変更します.
#
bytes("str",encoding="utf8") # encoding="utf8"
egg:
bytes(" ",encoding="gbk")
b'\xd6\xd0\xb9\xfa'
bytes(" ",encoding="utf-8")
b'\xe4\xb8\xad\xe5\x9b\xbd'
#
"str".encode(encoding="utf8") # encoding="utf8" ,
egg:
" ".encode(encoding="gbk")
b'\xd6\xd0\xb9\xfa'
" ".encode(encoding="utf8")
b'\xe4\xb8\xad\xe5\x9b\xbd'
# , , Unicode ASCII。 utf8 Unicode ( ), utf16
bytes文字列をUnicodeタイプに変換したい場合
bytes.decode( bytes ,encoding=" " ) # bytes : b+ , b'abc'
egg:
bytes.decode(b'\xe4\xb8\xad\xe5\x9b\xbd',encoding="utf-8")
' '
bytes.decode(b'\xd6\xd0\xb9\xfa',encoding="gbk")
' '
2、sysモジュールのstdout,stdin,stderr*
sys.stdout.write(str) # str pipe, pipe , :print(str)
sys.stdin.readline() # pipe , pipe ,
# , str unicode , bytes
正式な内容
ファイルを作成します.py
import subprocess as sub
import sys
popen = sub.Popen("python ./test.py", stdin=sub.PIPE, stdout=sub.PIPE, stderr=sub.PIPE) # , , pipe
for line in sys.stdin: #
popen.stdin.write(line.encode(encoding="utf8")) # pip,write bytes
popen.stdin.flush() #
output = popen.stdout.readline() # , bytes
sys.stdout.write(bytes.decode(output)) # sys stdout , , print(out)
ファイルを作成するpy,
import sys
while True:
line = sys.stdin.readline() #
sys.stdout.write(line) # , print
# : , , line bytes unicode , sys.stdout.write(bytes.decode(output) str 。