2014-11-09 53 views
2

我正在嘗試構建一個python腳本,我每天運行該腳本以便從前兩天獲取OpenDNS的那些天DNS請求。這是我迄今爲止所擁有的。如何在subprocess.call()後輸入密碼

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 
    ) 

的問題是,它運行後:

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

它然後要求輸入密碼的帳戶。我無法弄清楚如何輸入密碼。我在使用

echo password | 

作品部分的嘗試,但返回下面的錯誤,並且進程結束全部的數據可以下載之前

的stty: 標準輸入:用於設備 stty的不適當的ioctl:標準輸入:不適當的設備ioctl

有沒有一種方法,我可以寫這個,所以進程在提示時輸入密碼,然後等待下載在結束過程之前是否完成?

回答

0

我發現,使用:

echo password 

作品有錯誤可能被忽略。我認爲它在完成之前終止的原因是因爲文件大小很小。在相同日期範圍內在終端中手動運行後,文件大小匹配,這是由於該日期範圍內可用的少量數據。

+0

如果你要回答自己的問題,至少也要標記它,這樣這個問題就不會出現在未答覆的列表中 – 2014-11-09 12:27:18

+0

我不能將它標記爲已回答,直到2天過去。 – Cole 2014-11-09 19:09:08

+0

啊對,我忘記了那2天的事情 – 2014-11-09 22:53:31