【问题标题】:Calling a script that contains solely an email address调用仅包含电子邮件地址的脚本
【发布时间】:2016-05-28 12:43:21
【问题描述】:

我想知道是否有一种方法可以让我在 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 脚本,其唯一目的是批量更改每个脚本中的电子邮件地址,或者更好的是,包含电子邮件地址,所有其他脚本只是调用该脚本来使用它存储在该脚本中的电子邮件地址。

这可能吗?如何实现?

【问题讨论】:

  • 您的文件可能只包含一个电子邮件地址。然后更改每个脚本以读取该文件,而不是显式设置电子邮件地址。

标签: python python-2.7 selenium selenium-webdriver


【解决方案1】:

其中一个选项是将电子邮件作为命令行参数传递。有一个内置且非常方便的模块可以从命令行解析参数 - 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 文件中导入所有设置(如果存在)。通常local_settings.py 被添加到存储库忽略的文件中(.gitignoregit 的情况下)。这基本上允许在本地重新定义settings.py 中配置的默认设置。您的脚本的每个用户都可以创建本地 local_settings.py 文件,该文件将包含它自己的 EMAIL 设置。在您的脚本中,您只需从设置中导入 EMAIL

import settings

EMAIL = settings.EMAIL

另见:

【讨论】:

  • 比实际更改电子邮件更好的主意:P
  • @alecxe,为确保我正确理解这一点,一旦在 cmd 中输入电子邮件,该设置是否会一直持续,只要每个脚本都包含您在第一个 sn 中提到的代码-p,它会一直引用cmd中设置的email?
  • 我从不了解自己,哈哈。再次感谢。很好的答案:)
【解决方案2】:

如果您确实需要在脚本中更改它并且不能像其他答案建议的那样简单地使用命令行参数

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 以使用命令行参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多