2014-11-09 2 views
2

나는 지난 2 일 동안 OpenDNS에서 DNS 요청을 가져 오기 위해 매일 실행 한 python 스크립트를 작성하려고합니다. 이것은 내가 지금까지 가지고있는 것이다.subprocess.call() 이후에 암호를 입력하는 방법

bash fetchstats ' + str(username) + ' <network_id> ' + str(dateRange) + ' > ' + str(outputFile) 

를 그 다음 계정에 대한 암호를 묻습니다 :

import subprocess 
import datetime 
two = datetime.date.today() - datetime.timedelta(2) 
one = datetime.date.today() - datetime.timedelta(1) 
path = '~/Downloads/opendns-fetchstats-master' 
dateRange = str(two) + ' ' + str(one) 
dateRange2 = str(two) + 'to' +str(one) 
username = '[email protected]' 
password = 'password' 
outputFile = dateRange2 + '.csv' 
print dateRange2 
subprocess.call(
    ['cd ' + str(path) + ' && echo '+ str(password) + ' | bash fetchstats ' + 
    str(username) + ' home ' + str(dateRange) + ' > ' + str(outputFile)], 
    shell=True 
    ) 

문제는 실행 된 후이다. 암호 입력 방법을 알 수 없습니다. 내 부분적으로

echo password | 

작품을 사용에 시도하지만 프로세스가 아래의 오류를 반환하고 프로세스가 모든 데이터를 다운로드 할 수 있습니다 전에 종료

의 stty : 표준 입력 : 장치 의 stty에 대한 부적절한 IOCTL : 표준 입력 : 부적절한 장치 용 ioctl

메시지를 표시 할 때 프로세스가 암호를 입력하고 다운로드 할 때까지 기다릴 수있는 방법이 있습니까? 프로세스가 끝나기 전에 완료 되었습니까?

답변

0

있습니다

표준 에러 나는 발견 사용 :

echo password 

작품과 거기에 오류가 있습니다 무시해라. 파일 크기가 너무 작기 때문에 파일이 완성되기 전에 종료되었다고 생각한 이유가 있습니다. 동일한 날짜 범위의 터미널에서 수동으로 파일을 실행 한 후에는 파일 크기가 일치하며 해당 날짜 범위에서 사용할 수있는 소량의 데이터 때문이었습니다.

+0

자신의 질문에 답변 할 예정이라면 적어도 답장을하십시오. 대답하지 않은 목록에는이 질문이 없을 것입니다. –

+0

2 일이 지나야 답변으로 표시 할 수 없습니다. – Cole

+0

아아 맞아, 그 2 일간의 일 잊어 버렸어. –

0

당신은 당신이 제어 할 수 있습니다 subprocess.Popen을 사용하는 것이 좋습니다 표준 입력/표준 출력 /도 this related question

관련 문제