小编gol*_*lum的帖子

Python pytz时区函数返回一个9分钟的时区

由于某些我无法弄清楚的原因,从以下代码:

>>> from pytz import timezone
>>> timezone('America/Chicago')
Run Code Online (Sandbox Code Playgroud)

我明白了:

<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD>
Run Code Online (Sandbox Code Playgroud)

我想,我应该得到:

<DstTzInfo 'America/Chicago' LMT-1 day, 18:00:00 STD>
Run Code Online (Sandbox Code Playgroud)

...因为我认为我的时区距离UTC只有6小时9分钟.

我已经查看了源代码,pytz但我承认我还没有完全弄清楚出了什么问题.

我已将其他值传递给timezone()函数,它返回的值似乎是正确的.但由于某些原因,与我的时区相关的信息不正确.

最后,我旁边的立方体中的同事确认该函数在他的机器上返回正确的时区信息.

有谁知道为什么我的时区('America/Chicago')会在9分钟后关闭?我运行版本2015.7pytz安装使用pip.谢谢!

python timezone pytz timezone-offset

19
推荐指数
3
解决办法
5377
查看次数

如何访问名称中带有点的 python argparse 参数

Python 的 argparse 允许我定义名称中包含点的参数名称。但我怎样才能访问这些呢?

import argparse


parser = argparse.ArgumentParser()
parser.add_argument("inputfile.txt")
parser.add_argument("outputfile.txt")

args = parser.parse_args(['hello', 'world'])

# now args is:
# Namespace(inputfile.txt='hello', outputfile.txt='world')


# and this does not work
print(args.inputfile.txt)
>>> AttributeError: 'Namespace' object has no attribute 'inputfile'
Run Code Online (Sandbox Code Playgroud)

显然,可以使用名称中的点来创建属性名称,但是如何访问这些属性名称呢?

编辑:我的目标是让 argparse 显示 inputfile.txt 名称(例如使用 --help),但调用属性“inputfile”。

尝试了一些建议后,完成此操作的最简单方法是使用元变量选项:

parser.add_argument("inputfile", metavar="inputfile.txt")
Run Code Online (Sandbox Code Playgroud)

python argparse

7
推荐指数
1
解决办法
4875
查看次数

Windows 10任务管理器如何检测虚拟机?

Windows 10任务管理器(taskmgr.exe)知道它是在物理机还是虚拟机上运行.

如果查看" 性能"选项卡,您会注意到处理器标签的数量是读取逻辑处理器:虚拟处理器:.

此外,如果在虚拟机内运行,还有标签虚拟机:是.

请参阅以下两个屏幕截图:

taskmgr本地处理器

taskmgr虚拟处理器

我的问题是,如果有一个记录的API调用taskmgr用于进行这种检测吗?

我非常简短地看一下反汇编,似乎检测代码与GetLogicalProcessorInformationEx和/或IsProcessorFeaturePresent和/或NtQuerySystemInformation有某种关系.

但是,我没有看到(至少没有花费更多时间来分析汇编代码).

并且:这个问题是IMO与其他现有问题无关,如何检测我的程序是否在虚拟机内运行?因为我没有看到任何代码试图将smbios表字符串或cpu供应商字符串与管理程序典型的现有已知字符串("qemu","virtualbox","vmware")进行比较.我不排除较低级别的API实现可以做到这一点,但我没有在taskmgr.exe中看到这种代码.

更新:我还可以排除taskmgr.exe正在使用CPUID指令(EAX = 1并检查ECX中的管理程序位31)来检测矩阵.

更新:仔细看看反汇编表明确实检查了第31位,显然没有那么做.

我将在下面自己回答这个问题.

windows virtualization reverse-engineering virtual-machine windows-10

7
推荐指数
1
解决办法
1889
查看次数