将argparse参数传递给不同的python模块

时间:2019-12-04 03:17:45

标签: python

我需要将用户输入从命令行传递到我编写的另一个python模块中。

我编写了一个Web爬虫模块,该模块从公司Wiki收集信息,供我的主脚本使用。我正在将网络抓取工具作为模块导入到主脚本中。

问题在于,当用户执行主要功能并指示他们要运行Web抓取工具时,会提示您输入密码。即使他们在命令行上输入了密码。

在主脚本中,我要走

import argparse
import getpass
from web_scraper import web_scraper

def authenticate():
    auth = get_login()
    auth = str(auth).replace('(','').replace('\'','').replace(',',':').replace(')','').replace(' ','')
    return auth

def arguments():
    parser = argparse.ArgumentParser(description='This is a program that lists the servers in EC2')
    parser.add_argument(
    "-u",
    "--user",
    default = getpass.getuser(),
    help = "Specify the username to log into Confluence")

    parser.add_argument(
    "-d",
    "--password",
    help = "Specify the user's password")

    options = parser.parse_args()
    return options

write_data_to_confluence(auth, html, pageid, title):
    print("Stuff happens here.")

def main():
    html = 'hi'
    pageid = 12345678
    title = 'My Title'
    options = arguments()
    if update_account_list.lower() == 'y':
        web_scraper()
    if options.password and options.user:
        user = options.user
        password = options.password
        auth = (user, password)
        write_data_to_confluence(auth, html, pageid, title)
    else:
        auth = authenticate()
        write_data_to_confluence(auth, html, pageid, title)

在web_scraper模块中,我要走

def authenticate():
    auth = get_login()
    auth = str(auth).replace('(','').replace('\'','').replace(',',':').replace(')','').replace(' ','')
    return auth

    web_scraper():
        print("I'm scaping the web!") # code for this function doesn't matter to the problem

    def main():
        web_scraper()

网络抓取模块是一个单独的文件,也由其他几个使用它的模块共享。

我希望用户在命令行上输入密码,然后将其传递给其他模块中的网络抓取工具。这样,用户不必两次(在命令行中一次,在程序中一次)输入密码。

我该如何实现?

1 个答案:

答案 0 :(得分:1)

您拥有一切,只需通过函数调用传递options ...

        auth = authenticate(options)
def authenticate(options):