Python 如何在subprocess.call()之后输入密码
我正在尝试构建一个python脚本,我每天都运行该脚本,从前2天的OpenDNS获取当天的DNS请求。这就是我目前所拥有的Python 如何在subprocess.call()之后输入密码,python,subprocess,Python,Subprocess,我正在尝试构建一个python脚本,我每天都运行该脚本,从前2天的OpenDNS获取当天的DNS请求。这就是我目前所拥有的 import subprocess import datetime two = datetime.date.today() - datetime.timedelta(2) one = datetime.date.today() - datetime.timedelta(1) path = '~/Downloads/opendns-fetchstats-master' dat
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@email.com'
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)
部分工作,但进程返回以下错误,进程在下载所有数据之前结束
stty:
标准输入:设备的ioctl不正确
stty:标准输入:设备的ioctl不正确
有没有方法可以写这个,这样进程在提示时输入密码,然后等到下载完成后才结束进程?
< P>你应该考虑使用SudiPurtual.Popen,它允许你控制STDIN/STDUD/STDRR 还有我发现:echo password
工作正常,错误可以忽略。我认为它会在完成之前终止的原因是因为文件太小了。在终端中手动运行相同日期范围的文件后,文件大小匹配,这是因为该日期范围的可用数据量较小。如果您要回答自己的问题,至少也要标记它,这样,这个问题就不会出现在未回答的列表中。直到两天过去,我才能将其标记为已回答。虽然这样做有效,但以明文打印密码从来都不是一个好主意。
echo password