2014-12-18 6 views
0

안녕하세요. 그런 문제가 있습니다. 하위 프로세스를 통해 로그인해야합니다. 내가 이러한 오류 tcgetattr: Inappropriate ioctl for device파이썬 하위 프로세스 stdin 파이프

sp = subprocess.Popen([cmd],stdout=subprocess.PIPE, stdin=subprocess.PIPE) 
i, o = sp.communicate() 

첫 번째 문자열 후 : 그래서 내가 이런 식으로 뭔가를 시도 them.So에 로그인과 암호를 A 입력 파이프를 만들고 쓰고 싶어요. 그리고 나는 아무 값도 가지고 있지 않다. o. 이 경우에는 어떻게 필통을 쓸 수 있습니까? 도와 줘서 고마워. subprocess.communicate(input) docs에서

+0

'stderr'에 대해 아무것도 제공하지 않습니다 : 'stderr = subprocess.PIPE' –

답변

0

:

옵션 입력 인수가 아이에게 과정 ... 당신은 프로세스의 표준 입력에 데이터를 전송하려는 경우, 당신이 필요
주를 전송하는 데이터해야한다 stdin = PIPE로 Popen 개체를 만듭니다. 비슷하게 결과 튜플에 None 이외의 것을 얻으려면 stdout = PIPE 그리고/또는 stderr = PIPE도 제공해야합니다.

즉, 입력을 서브 프로세스에 전달하려면 input 매개 변수를 지정하십시오. 비 Noneo 값을 얻으려면 stderr=PIPE을 지정해야합니다.

많은 경우 암호 프롬프트와 암호 자체가 파이프에 쓰여지거나 파이프에서 읽히지 않지만 터미널과 직접 연결됩니다. 즉, 명령이 수락 할 수있는 옵션을 설정할 수있는 경우를 제외하고는 암호를 전달할 의사가 필요할 수 있습니다 stdin을 통한 암호. pexpect을 사용하여 pty을 사용하는 하위 프로세스와 상호 작용할 수 있습니다. 첫 번째 이유를 확인하십시오. Why not just use a pipe (popen())?

관련 문제