내 목표는 내 리포지토리 및 패키지를 설치하는 python 스크립트로 새 AWS 인스턴스를 구성한 다음 하위 프로세스를 사용하여 (이 경우) 포스트그레스를 구성하는 것입니다. 값은 yaml 또는 json 파일에서 읽습니다. 지금까지 모든 패키지를 설치하고 환경에 대해 repos를 성공적으로 수행했습니다. 내가 붙어있는 곳은 postgres에서 사용자를 생성하고 데이터베이스를 만드는 python 스크립트이다.다중 표준 입력과 함께 subprocess.popen을 사용하여 시스템 구성 : Python 2.7
import subprocess
# out is to show output, com is the stdin value(s) to pass
def run(command, out=False, com=False,):
process = subprocess.Popen(
command,
close_fds=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
)
if out:
out = iter(process.stdout.readline, b'')
for line in out:
print(line)
if com:
process.stdin.write(com)
# http://stackoverflow.com/questions/16091112/python-pipe-to-popen-stdin
# process.communicate(com) doesn't fit, i need multiple stdin
run(['ls', '-l'], True) # works
run(['sudo', 'su', '-', 'postgres']) # works
run(['createuser'], False, 'testuser')
# broken, also after i get this working, this should be a list of stdin values
# this results in infinite lines:
# Shall the new role be a superuser? (y/n)
# I do have a workaround, run(['createuser', '-d', '-r', '-s', '-w', 'username'], False)
# Confirmed workaround created user successfully
도착했습니다. 다음의 무한한 출력을보십시오 : 새로운 역할을 수퍼 유저로할까요? (y/n) –
이 문제를 해결하는 가장 좋은 방법은 여러 개의 표준 입력을 필요로하는 하위 프로세스가있는 명령을 실행하지 않는 것입니다. 나는 파이썬 3에서이 작업이 가능하다고 느낍니다. –
다음에서 성취했습니다 : https://github.com/muhuk/cuisine-postgresql/blob/master/cuisine_postgresql.py –