[PYTHON] 파이썬 서브 프로세스의 파일 기술자 3에 쓴다. 객체를 열어 라.
PYTHON파이썬 서브 프로세스의 파일 기술자 3에 쓴다. 객체를 열어 라.
하위 프로세스의 파일 설명자 3에 어떻게 쓰는지. 개체를 열었습니까?
파이썬 (명명 된 파이프를 사용하지 않고)을 사용하여 다음 쉘 명령에서 리디렉션을 수행하려고합니다.
$ gpg --passphrase-fd 3 -c 3<passphrase.txt < filename.txt > filename.gpg
해결법
-
==============================
1.하위 프로세스 proc는 상위 프로세스에서 열린 파일 설명자를 상속합니다. 따라서 os.open을 사용하여 passphrase.txt를 열고 관련 파일 설명자를 얻을 수 있습니다. 그런 다음 해당 파일 설명자를 사용하는 명령을 생성 할 수 있습니다.
하위 프로세스 proc는 상위 프로세스에서 열린 파일 설명자를 상속합니다. 따라서 os.open을 사용하여 passphrase.txt를 열고 관련 파일 설명자를 얻을 수 있습니다. 그런 다음 해당 파일 설명자를 사용하는 명령을 생성 할 수 있습니다.
import subprocess import shlex import os fd=os.open('passphrase.txt',os.O_RDONLY) cmd='gpg --passphrase-fd {fd} -c'.format(fd=fd) with open('filename.txt','r') as stdin_fh: with open('filename.gpg','w') as stdout_fh: proc=subprocess.Popen(shlex.split(cmd), stdin=stdin_fh, stdout=stdout_fh) proc.communicate() os.close(fd)
파일 대신 파이프에서 읽으려면 os.pipe를 사용할 수 있습니다.
import subprocess import shlex import os PASSPHRASE='...' in_fd,out_fd=os.pipe() os.write(out_fd,PASSPHRASE) os.close(out_fd) cmd='gpg --passphrase-fd {fd} -c'.format(fd=in_fd) with open('filename.txt','r') as stdin_fh: with open('filename.gpg','w') as stdout_fh: proc=subprocess.Popen(shlex.split(cmd), stdin=stdin_fh, stdout=stdout_fh ) proc.communicate() os.close(in_fd)
from https://stackoverflow.com/questions/6050187/write-to-file-descriptor-3-of-a-python-subprocess-popen-object by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] utf8 문제가있는 파이썬 정규식 (0) | 2018.11.18 |
---|---|
[PYTHON] sparse_softmax_cross_entropy_with_logits를 사용하여 tensorflow에서 가중 크로스 엔트로피 손실을 구현하려면 어떻게해야합니까? (0) | 2018.11.18 |
[PYTHON] 파이썬 - 특정 클래스에 의해 시작된 활성 스레드 수를 얻는 방법? (0) | 2018.11.18 |
[PYTHON] Canvas에서 이미지를 업데이트하는 방법은 무엇입니까? (0) | 2018.11.18 |
[PYTHON] PyInstaller로 빌드 된 Windows EXE가 다중 처리와 함께 실패합니다. (0) | 2018.11.18 |