我需要在python脚本中设置一些环境变量,我希望从python(shell脚本)调用的所有其他脚本都是子进程,以查看环境变量集.该值是一个数字.
如果我这样做os.environ["DEBUSSY"] = 1,它抱怨说1必须是字符串.我也想知道在设置之后如何在python中读取环境变量(在脚本的后面部分).
我有一个异步API,我用它连接并发送邮件到SMTP服务器,它有一些设置和拆除它.所以它很适合使用contextmanagerPython 3的contextlib.
虽然,我不知道它是否可能写,因为它们都使用生成器语法来编写.
这可能会证明问题(包含yield-base和async-await语法的混合,以演示异步调用和上下文管理器的收益之间的差异).
@contextmanager
async def smtp_connection():
client = SMTPAsync()
...
try:
await client.connect(smtp_url, smtp_port)
await client.starttls()
await client.login(smtp_username, smtp_password)
yield client
finally:
await client.quit()
Run Code Online (Sandbox Code Playgroud)
目前python中有可能出现这种情况吗?with as如果是,我将如何使用声明?如果没有,我可以用另一种方式实现这一点 - 也许使用旧式上下文管理器?
我正在阅读http://eigenhombre.com/2013/04/20/introduction-to-context-managers/.
在里面:
上下文管理器是一种在您需要的地方分配和释放某种资源的方法.最简单的例子是文件访问:
with file("/tmp/foo", "w") as foo:
print >> foo, "Hello!"
Run Code Online (Sandbox Code Playgroud)
这基本上相当于:
foo = file("/tmp/foo", "w")
try:
print >> foo, "Hello!"
finally:
foo.close()
Run Code Online (Sandbox Code Playgroud)
文章接着进行了更多的解释,但我仍然不确定我是否理解他们的目的.有人可以澄清一下.还有什么是"背景"?
我已经看过试图用语句和上下文管理器来理解python,但我又不确定上下文管理器的用途是什么?它只是"尝试......终于......"的替代语法,还是它们的其他目的
我使用SQLAlchemy(非常好的ORM,但文档不够清楚)与PostgreSQL通讯
一切都很好,直到出现一种情况,即达到最大连接限制的postgres“崩溃”原因:不再允许连接(max_client_conn)。
这种情况使我认为我做错了。经过几次实验后,我弄清楚了如何不再面对该问题,但是还剩下一些问题。
下面,您将看到没有提到问题的代码示例(在Python 3+中,PostgreSQL设置为默认设置),以及我想听听的内容最终是下列问题的答案:
连接到数据库:
from sqlalchemy.pool import NullPool # does not work without NullPool, why?
def connect(user, password, db, host='localhost', port=5432):
"""Returns a connection and a metadata object"""
url = 'postgresql://{}:{}@{}:{}/{}'.format(user, password, host, port, db)
temp_con = sqlalchemy.create_engine(url, client_encoding='utf8', poolclass=NullPool)
temp_meta = sqlalchemy.MetaData(bind=temp_con, reflect=True)
return temp_con, temp_meta
Run Code Online (Sandbox Code Playgroud)
获取会话以使用DB的功能:
from contextlib import contextmanager
@contextmanager
def session_scope():
con_loc, meta_loc = connect(db_user, db_pass, db_instance, 'localhost') …Run Code Online (Sandbox Code Playgroud) 我正在努力解决这个问题.
我有一个这样的列表:
g = ['hey','man','sup']
Run Code Online (Sandbox Code Playgroud)
我想要3个不同的文本文件,如"hey.txt","man.txt","sup.txt".
我用了;
f = open('hey.txt','w')
sys.stdout = f
....
Run Code Online (Sandbox Code Playgroud)
但有没有办法做到这一点?
for x in range(3):
f = open('g[x].txt','w')
Run Code Online (Sandbox Code Playgroud)