调用仅包含电子邮件地址的脚本

时间:2016-02-17 01:05:01

标签: python python-2.7 selenium selenium-webdriver

我想知道是否有一种方法可以更改python脚本中的值,并且作为回报会更改其他脚本中的所有相应值作为批量更改?

我会解释自己。我有一个python脚本,只需在文本框中输入一个电子邮件地址(假设我们将此脚本保存为 portal.py ):

EMAIL = "Test@email.com"

... loads of code in between

email = driver.find_element_by_id("ctl00_MainContent_addressView_emailAddTextBox").send_keys(EMAIL)
confirm_email = driver.find_element_by_id("ctl00_MainContent_addressView_confirmEmailTextBox").send_keys(EMAIL)

现在将要发生的是其他用户将使用保存在本地计算机中的 portal.py 。每个人都有自己独特的电子邮件地址。因此,他们需要在脚本中手动更改其电子邮件地址。但是如果我们有50个需要电子邮件地址的脚本会发生什么?那将是耗时的。

所以我希望我们有一个python脚本,唯一的目的是批量更改每个脚本中的电子邮件地址,或者更好的是,包含电子邮件地址和所有其他脚本只需调用该脚本即可使用该脚本存储在该脚本中的电子邮件地址。

这可能吗?如何实施?

2 个答案:

答案 0 :(得分:2)

其中一个选项是将电子邮件作为命令行参数传递。有一个内置且非常方便的模块来解析命令行中的参数 - argparse

示例:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('email', help='Email to be used in testing')

args = parser.parse_args()
EMAIL = args.email

然后,您可以将脚本运行为:

python your_script.py --email="test@domain.com"

您可能还有一个特殊的配置文件。如果我们遵循Django或Scrapy等其他框架 - 我们会称之为settings.py。在settings.py的末尾,我们可以导入:

try:
    from local_settings import *
except ImportError:
    pass

将导入local_settings.py文件中的每个设置(如果存在)。 Usualy local_settings.py被添加到存储库忽略的文件(.gitignore的情况下git)。这基本上允许在本地重新定义settings.py中配置的默认设置。脚本的每个用户都可以创建包含其自己的local_settings.py设置的本地EMAIL文件。在您的脚本中,您只需从设置中导入EMAIL

import settings

EMAIL = settings.EMAIL

另见:

答案 1 :(得分:2)

如果你真的需要在脚本中更改它,并且不能简单地使用命令行args作为另一个答案建议

with open("portal.py","rb") as f:
    data = f.read()

with open("portal.py","wb") as f:
    f.write(re.sub('EMAIL = ".*"','EMAIL = "my_new_email@blah.com"',data))

#replace current script with portal.py
os.execv("python",("portal.py",)+sys.argv[1:])

但我强烈建议编辑portal.py以使用命令行args