跨Python脚本使用输入变量

2024-04-28 12:06:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在另一个Python脚本中执行一个操作之后访问函数中包含的变量,但是我不想遍历函数的操作,我只需要访问变量gh和{}的返回值。在

我尝试了不同的方法来实现这一点,比如在主脚本中将变量的初始值设置为None,但我遇到的问题是,当我将script1导入script2时,它会运行脚本并再次将有问题的变量重置为None。另外,我试着把它们包装在一个没有运气的类中。在

另外,我尝试过使用if __name__ = '__main__':来运行函数,但我似乎不知道如何将函数中的值放入script2中用作全局变量。在

这个函数的答案,可能会用到另一个函数??,但我不能很好地确定语法,因为函数似乎没有保存变量的值。在

如果我问错了这个问题,请让我知道如何改进它,因为我试图问“好”的问题,这样我就不会被禁止。我还在学习,我确实在这里问了很多问题,但通过这样做我学到了很多。在

脚本1.py:

#! /usr/bin/python

import github3
from github3 import login, GitHub, authorize
from getpass import getuser, getpass
import requests

import configparser

def getCreds():
    try:

        user = input('GitHub username: ')
    except keyboardInterrupt:
        user = getuser()

    password = getpass('GitHub token for {0}: '.format(user))

    gh = login(user, password)


if __name__ == '__main__':

    getCreds()
    exec(open("next_file.py").read())

脚本2.py

^{pr2}$

Tags: 函数namefrompyimportgithub脚本none
2条回答

这个答案完全基于我的假设,即您只需要获取用户凭据一次,然后在其他脚本中重复使用它“n”次。 这是我该怎么做的


更新1

您的问题还与如何组织和运行脚本有关,如果您将脚本捆绑到python包中并运行它们,下面的示例就可以工作了

因为。例如

enter image description here

但是,如果您计划单独运行单个脚本,那么您除了调用每个脚本的登录提示之外别无选择,除非您计划完全删除请求用户凭据并使用文件中预先配置的数据。在

脚本1

from github3 import login
USER_CREDS = None   # Store raw input credentials here ,not recomended
GIT_USERS = {}     # global dict to store multiple users with username as key

def getCredentials():
    global USER_CREDS
    if USER_CREDS:
        print "returning user credentials"
        return USER_CREDS
    print "gettting user credentials"
    user = raw_input("Enter Username")
    pwd = raw_input("Enter Password")

    USER_CREDS = (user, pwd)

    return USER_CREDS


def do_login():
    global GIT_USERS
    user, pwd = getCredentials()
    if not GIT_USERS.get(user, None):
        gh = login(user, password=pwd)
        GIT_USERS[user] = gh
    return GIT_USERS[user]

在其他脚本中

^{pr2}$

例2

脚本3

from script1 import do_login
creds = do_login()  

脚本4

from script3 import creds
from script1 import do_login
print creds
print do_login() # No input prompt would be provided

我认为这是一种常见的解决办法。设置一个名为全局的文件_变量py(或类似的东西)并在那里存储全局变量。(See this post by @systemizer)下面是代码的简化版本:

script1.py

if __name__=='__main__':
    user = raw_input('GitHub username: ')
    with open('global_var.py','w') as f:
        f.write("user = '%s'" % user)
password = 'blah'
gh = '<login(user, password)>'

script2.py

^{pr2}$

相关问题 更多 >