在这一点上,这对我来说真的只是一个概念性的问题.
在Lisp中,程序是数据,数据是程序.REPL正是这样做 - 读取然后进行评估.
那么如何以安全的方式从用户那里获得输入呢?显然它是可能的 - 我的意思是viaweb - 现在雅虎!商店非常安全,所以它是如何完成的?
我有以下布局:
/spamalot
/spam
__init__.py
spam.py
/spam_on_eggs
__init__.py
spam_on_eggs.py
/tests
test_spam.py
Run Code Online (Sandbox Code Playgroud)
垃圾邮件恰好是一个烧瓶应用程序.
在spam.py我内心
import spam_on_eggs.spam_on_eggs as eggs
# Other Flask setup & application code here.
Run Code Online (Sandbox Code Playgroud)
这工作正常 - 从spamalot我能够运行的目录python spam/spam.py
但是,当我开始将测试投入混音时,它并不那么棒.
在我的test_spam.py档案中,我有:
import spam.spam
test_client = spam.spam.app.test_client()
def test_it_fails():
assert False
Run Code Online (Sandbox Code Playgroud)
但是,它不是在我预期的地方失败,而是在导入行上失败:
/spamalot/ $ py.test
# some output
E ImportError
Run Code Online (Sandbox Code Playgroud)
我可以通过放入__init__.py我的/tests文件夹来解决这个问题,但后来我得到了一个不同的ImportError:
spam/spam.py:1: in <module>
> import spam_on_eggs.spam_on_eggs as eggs
E ImportError: No module named 'spam_on_eggs'
Run Code Online (Sandbox Code Playgroud)
我可以解决这一个通过改变线路:
from spam.spam_on_eggs import …Run Code Online (Sandbox Code Playgroud) 我在这里听了几个答案,但没有用.
我正在使用Macbook(优胜美地)开发,但我们的测试/生产盒是Debian 7(使用rsyslog).我试图以一种既可以在本地工作也可以在本地工作的方式注销syslog.
我尝试了使用的选项SysLogHandler.这适用于Mac:
import logging
import logging.handlers
import syslog
h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility=syslog.LOG_LOCAL1)
h.ident = 'works_on_macs'
logger = logging.getLogger('i_am_a_lumberjack')
logger.addHandler(h)
logger.debug("And I don't care")
logger.info('There is a sale on today')
logger.warn('Do not touch the hot stove!')
logger.error('Sorry, times up')
logger.critical('That sure is an ugly tie')
Run Code Online (Sandbox Code Playgroud)
这些消息将显示在我的mac syslog中.但是,当我改变address='/dev/log'Debian 7时......没有骰子.
然而:
import syslog
syslog.openlog(ident='im_a_lumberjack', facility=syslog.LOG_LOCAL1)
syslog.syslog(syslog.WARNING, 'Watch out!')
Run Code Online (Sandbox Code Playgroud)
适用于Debian 7,但不适用于Mac.
我真的很想能够获得一个适用于两个平台的日志记录解决方案.显然地址会有所不同,但我已经在配置中设置了它.
那么如何让syslog同时适用于Mac 和 Debian呢?
编辑:
作为进一步的信息 - 我发现我的SysLogHandler似乎可能没有正确使用设施(?).消息正在被拾起的系统日志,但他们要去一个包罗万象的,这使我相信他们没有得到与标记LOG_LOCAL1
我使用的Counter是这样的:
from collections import Counter
totals = Counter()
c_one = Counter(a=10, b=1)
c_two = Counter(a=10, b=-101)
totals += c_one
totals += c_two
# Output: Counter({'a': 20})
print(totals)
Run Code Online (Sandbox Code Playgroud)
这根本不是我的预期.我希望看到:
Counter({'a': 20, 'b': -100})
Run Code Online (Sandbox Code Playgroud)
我的底片去了哪里,是否会有一些Counter让我使用底片?
如果你做了traceroute,bad.horse你会得到这个惊人的结果:
? traceroute bad.horse 10:46:24
traceroute to bad.horse (162.252.205.157), 30 hops max, 60 byte packets
1 gateway (192.168.42.1) 0.382 ms 0.690 ms 0.795 ms
2 10.52.192.1 (10.52.192.1) 8.594 ms 13.533 ms 14.438 ms
3 70.183.68.108 (70.183.68.108) 14.525 ms 14.620 ms 14.643 ms
4 70.183.71.92 (70.183.71.92) 23.323 ms 24.356 ms 24.219 ms
5 dalsbprj01-ae1.0.rd.dl.cox.net (68.1.2.109) 119.445 ms 120.277 ms 62.337 ms
6 10ge6-9.core1.dal1.he.net (184.105.16.77) 70.903 ms 57.131 ms 67.526 ms
7 10ge12-6.core1.chi1.he.net (184.105.213.118) 43.732 ms 42.770 ms 43.774 ms …Run Code Online (Sandbox Code Playgroud) 我的问题:
我有一个包含多行数据的文件。我想尝试将每一行插入到我的数据库中,但如果任何行有问题,我需要回滚整个工具包和 kaboodle。但我想跟踪实际的错误,所以我可以这样说,而不是仅仅死在第一个有错误的记录上:
该文件有 42 个错误。
Run Code Online (Sandbox Code Playgroud)Line 1 is missing a whirlygig. Line 2 is a duplicate. Line 5 is right out.
我尝试执行此操作的方法是使用事务,但我遇到一个问题,SQLAlchemy 在 select 上创建隐式事务,显然我并不真正理解 sqlalchemy 如何使用事务,因为我所做的一切似乎都无法按照我想要的方式工作。这是一些演示我的问题的代码:
import sqlalchemy as sa
import logging
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
l = logging.getLogger('sqlalchemy.engine')
l.setLevel(logging.INFO)
l.addHandler(logging.StreamHandler())
engine = sa.create_engine('YOUR PG CONNECTION HERE')
Session = sessionmaker(bind=engine)
session = Session()
temp_metadata = sa.MetaData(schema='pg_temp')
TempBase = declarative_base(metadata=temp_metadata)
class Whatever(TempBase):
__tablename__ = 'whatevs'
id = sa.Column('id', sa.Integer, primary_key=True, autoincrement=True) …Run Code Online (Sandbox Code Playgroud) 显然我可以从中获取日期和时间datetime.datetime.now(),但我实际上并不关心秒或特别是微秒.
有什么地方我可以轻松获得日期+小时+分钟?
在C那里有atexit功能,它
atexit()函数通过exit(3)或通过程序main()的返回来注册在正常进程终止时调用的给定函数.
Python具有类似的功能.
.NET是否提供了在正常进程终止时调用代码的方法?我知道有像某些事情DomainUnload和ProcessExit,但至少据我所知,这是不可靠的-要么要求应用程序是Windows窗体(或WPF应用程序),或别的东西.我正在为.dll编写代码,所以我不能依赖于像主程序函数那样的东西 - 将它包装在try/catch中.
我的最终目标是执行一些文件清理(即刷新缓冲区和关闭).如果我可以调用一些非托管代码,例如win32api钩子或其他什么东西,我对此完全没问题.
我正在尝试通过 IIS 将 Flask 作为简单的 CGI 应用程序运行。
我有以下代码:
from wsgiref.handlers import CGIHandler
from flask import Flask
app = Flask(__name__)
@app.route('/')
def main():
return 'Woo woo!'
CGIHandler().run(app)
Run Code Online (Sandbox Code Playgroud)
我在 Windows 上运行 Python 3.3。我收到以下错误:
File "C:\Python33\lib\wsgiref\handlers.py",
line 509, in __init__(self, sys.stdin.buffer, sys.stdout.buffer, sys.stderr, )
AttributeError: 'NoneType' object has no attribute 'buffer' ".
Run Code Online (Sandbox Code Playgroud)
我添加了一些日志代码,事实证明sys.stdin是None.
Python 作为 CGI 处理程序添加到 IIS 中,如下所示:
Request path: *.py
Executable: C:\Windows\py.exe -3 %s %s
Run Code Online (Sandbox Code Playgroud)
那么,为什么 sys.stdin None 以及如何修复它?
编辑
看起来 sys.stdin 是 None 因为文件描述符无效。
我可以去
http://myjenkins:8080/job/Project/42/changes
Run Code Online (Sandbox Code Playgroud)
并查看触发特定Jenkins构建的提交消息.
但是,我想通过REST API或其他东西来获取它.我在搜索中没有运气.是否有捷径可寻?
python ×6
.net ×1
atexit ×1
cgi ×1
counter ×1
datetime ×1
equivalent ×1
flask ×1
iis ×1
import ×1
jenkins ×1
linux ×1
lisp ×1
logging ×1
macos ×1
pytest ×1
python-3.3 ×1
python-3.4 ×1
routing ×1
rsyslog ×1
security ×1
sqlalchemy ×1
traceroute ×1
transactions ×1
validation ×1