python 3 는 subprocess 모듈 을 통 해 스 크 립 트 를 호출 하고 스 크 립 트 와 상호작용 을 합 니 다.

업무 수요 로 인해 문제 와 같은 기능 을 실현 해 야 한다.인터넷 블 로그,자 료 를 찾 아 보 는 것 은 대부분 python 2 를 대상 으로 하 는 것 이 고 불분명 한 곳 이 많아 서 스스로 찾 아 본 결 과 를 정리 하고 블 로 그 를 다시 썼 다.
예비 지식
1.python 3 의 기본 문자열 형식
Python 2.x 는 ASCII 와 Unicode 문자열 을 동시에 지원 합 니 다.기본적으로 ASCII 인 코딩 입 니 다.파 이 썬 3 에 서 는 이러한 지원 이 바 뀌 었 습 니 다.유 니 코드 는 현재 기본 형식 이 되 었 고 ASCII 문자열 은 현재 bytes 라 고 부 릅 니 다.bytes 데이터 구 조 는 바이트 값 을 포함 하고 있 습 니 다.
데 이 터 를 포함 하 는 가 변 바이트 배열 이기 때문에 문자열 로 간주 해 서 는 안 됩 니 다.
위의 이 말 은(제3 판)에서 나 온 것 이다.이것 은 python 2 와 python 3 의 매우 큰 불 호환성 을 야기 시 켰 다.python 2 에 서 는 많은 방법 이 사용 되 지만 python 3 에 서 는 사용 할 수 없습니다.다행히도 python 은 이런 문 제 를 해결 하 는 방법 을 제공 했다.
기본 문자열 을 bytes 형식 으로 변환 하려 면 유 니 코드 를 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 문자열 을 유 니 코드 형식 으로 변환 하려 면

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      
정식 내용
파일 src/main.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)
파일 src/test.py 만 들 기,

import sys

while True:
 line = sys.stdin.readline() #          
 sys.stdout.write(line) #            ,   print  
 #   :            ,                ,          line   bytes    unicode  ,          sys.stdout.write(bytes.decode(output)       str  。
추가 지식:python 의 다 중 프로 세 스 는 input()를 사용 합 니 다.
python 3 다 중 프로 세 스 에서 하위 프로 세 스 가 키보드 에서 값 을 입력 하고 오류 문 제 를 실행 합 니 다.

python 에서 주 프로 세 스 는 키보드 에서 값 을 입력 할 수 있 습 니 다.하위 프로 세 스 는 허용 되 지 않 습 니 다.
이상 의 python 3 는 subprocess 모듈 을 통 해 스 크 립 트 를 호출 하고 스 크 립 트 와 상호작용 하 는 작업 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기