我有一个Python脚本,它使用'Print'打印到stdout.我最近通过Python Logger添加了日志记录,并希望如果启用了日志记录,这些打印语句将转到logger.我不想修改或删除这些打印语句.
我可以通过'log.info("some info msg")'来记录.我希望能够做到这样的事情:
if logging_enabled:
sys.stdout=log.info
print("test")
Run Code Online (Sandbox Code Playgroud)
如果启用了日志记录,则应记录"test",就像我执行log.info("test")一样.如果未启用日志记录,则只应将"test"打印到屏幕上.
这可能吗?我知道我可以以类似的方式将stdout指向文件(请参阅:重定向打印到日志文件)
假设我有一堆变量,或者是.True或者False.我想在一个if语句中评估一组这些变量,看看它们是否都是False这样的:
if var1, var2, var3, var4 == False:
# do stuff
Run Code Online (Sandbox Code Playgroud)
除此之外不起作用.我知道我可以这样做:
if var1 == False and var2 == False and var3 == False and var4 == False:
# do stuff
Run Code Online (Sandbox Code Playgroud)
但这很难看 - 特别是如果这些if语句在我的代码中会发生很多.有没有什么方法可以使用更清晰的语法进行此评估(如第一个示例)?
在IDLE解释器中,我使用dpkt执行以下操作:
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
Run Code Online (Sandbox Code Playgroud)
现在,当我试图看到'eth'的内容时,我可以打印它,或者只是写变量名.
当我做:
print eth
Run Code Online (Sandbox Code Playgroud)
我明白了:
O&áÿE(r @,òÀ¨
DYP?Jò}PªpÉ
Run Code Online (Sandbox Code Playgroud)
但是,当我简单地写:
eth
Run Code Online (Sandbox Code Playgroud)
我得到了更多的预期输出:
Ethernet(src='<removed>', dst='<removed>', data=IP(src='<removed>', off=16384, dst='<removed>', sum=11506, len=40, p=6, ttl=128, id=29344, data=TCP(seq=2527752393, ack=218580057, win=16202, sum=62077, flags=16, dport=80, sport=51626)))
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,做一个"打印(变量)"和写变量名之间的根本区别是什么?如果我做一个简单的赋值(即"x = 100"),我将得到"100"的结果"print x"和"x"
可能重复:
Python如何比较字符串和int?
我有一个Python脚本没有按预期评估两个值.该值'10'被确定为大于200.问题是保持'10'值的变量实际上是一个字符串而不是整数(而是200一个整数).
我的问题是:
在针对整数计算字符串时,Python经历了什么过程?它是如何进行比较的?
例如:
string="10"
int=200
if string >= int:
print("String is greater")
else:
print("Int is greater")
Run Code Online (Sandbox Code Playgroud)
输出:
String is greater
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我本以为Python在尝试比较两种类型时会退出并出错.
python ×4
variables ×2
evaluation ×1
if-statement ×1
integer ×1
logging ×1
printing ×1
python-idle ×1
stdout ×1
string ×1