小编Dan*_*ach的帖子

如何以编程方式确定是否存在未提交的更改?

在Makefile中,如果存在未提交的更改(在工作树或索引中),我想执行某些操作.什么是最干净,最有效的方法?退出的命令在一种情况下返回值为零而在另一种情况下为非零符合我的目的.

我可以运行git status并输出输出grep,但我觉得必须有更好的方法.

git

205
推荐指数
8
解决办法
8万
查看次数

我在Python中使用什么来实现最大堆实现?

Python包含用于min-sheaps的heapq模块,但我需要一个最大堆.我应该在Python中使用什么来实现max-heap实现?

python heap recursive-datastructures data-structures

197
推荐指数
10
解决办法
10万
查看次数

运行进程,不要等待

我想运行一个进程而不是等待它返回.我已尝试使用P_NOWAIT和子进程生成如下:

app = "C:\Windows\Notepad.exe"
file = "C:\Path\To\File.txt"

pid = subprocess.Popen([app, file], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE).pid
Run Code Online (Sandbox Code Playgroud)

但是,控制台窗口保持不变直到我关闭记事本.是否可以启动该过程而不是等待它完成?

python windows

37
推荐指数
3
解决办法
6万
查看次数

我如何处理Python中的递归repr()?

我在Python中编写了一个容器类型,我正在尝试编写一个可靠的__repr__方法来正确处理容器包含自身的情况.

例如,这是内置的list功能:

>>> x = []
>>> x.append(x)
>>> repr(x)
'[[...]]'
Run Code Online (Sandbox Code Playgroud)

用C语言编写的用于CPython的容器类型可以通过使用Py_ReprEnter和实现此功能Py_ReprLeave.在纯Python中是否有相同的功能,还是我需要创建自己的?

python

12
推荐指数
2
解决办法
1745
查看次数

如何编组指向结构指针数组的指针?

我有一个带有以下签名的C函数:

int my_function(int n, struct player **players)
Run Code Online (Sandbox Code Playgroud)

players是指向struct player对象指针数组的指针. n是数组中指针的数量.该函数不修改数组也不修改结构的内容,并且在返回后不保留任何指针.

我尝试了以下方法:

[DllImport("mylibary.dll")]
static extern int my_function(int n, 
    [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] 
     player_in []players);
Run Code Online (Sandbox Code Playgroud)

但是,它将数据编组为指向结构数组的指针,而不是指向结构指针数组的指针.

.net c# pinvoke interop marshalling

11
推荐指数
1
解决办法
5769
查看次数

在Win32中,有没有办法测试套接字是否是非阻塞的?

在Win32中,有没有办法测试套接字是否是非阻塞的?

在POSIX系统下,我会做类似以下的事情:

int is_non_blocking(int sock_fd) {
    flags = fcntl(sock_fd, F_GETFL, 0);
    return flags & O_NONBLOCK;
}
Run Code Online (Sandbox Code Playgroud)

但是,Windows套接字不支持fcntl().使用ioctl和FIONBIO 设置非阻塞模式,但似乎没有办法使用ioctl 获得当前的非阻塞模式.

在Windows上是否有其他一些调用我可以用来确定套接字当前是否处于非阻塞模式?

sockets windows winapi winsock nonblocking

10
推荐指数
2
解决办法
5895
查看次数

为什么我对Activator.CreateInstance的调用会间歇性地失败?

我正在使用以下代码访问Windows资源管理器Shell的乐队网站服务:

Guid GUID_TrayBandSiteService = new Guid(0xF60AD0A0, 0xE5E1, 0x45cb, 0xB5, 0x1A, 0xE1, 0x5B, 0x9F, 0x8B, 0x29, 0x34);
Type shellTrayBandSiteService = Type.GetTypeFromCLSID(GUID_TrayBandSiteService, true);
site = Activator.CreateInstance(shellTrayBandSiteService) as IBandSite;
Run Code Online (Sandbox Code Playgroud)

大多数情况下,它很有效.在很小的时间内(小于1%),对Activator.CreateInstance的调用会引发以下异常:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {F60AD0A0-E5E1-45CB-B51A-E15B9F8B2934} failed due to the following error: 80040154.
  at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
  at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
  at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
  at System.Activator.CreateInstance(Type type, Boolean nonPublic)
Run Code Online (Sandbox Code Playgroud)

我查找了错误代码,似乎表明该服务未注册.我很确定实际情况并非如此,因为调用会在一段时间后正常工作,并且CLSID由提供explorer.exe.

我很难过.什么可能导致Activator.CreateInstance失败,但很少?

c# com winapi createinstance winforms

5
推荐指数
1
解决办法
2353
查看次数

如何判断鼠标是否位于顶级窗口之外?

如何有效地判断鼠标是否在顶级窗口上?

通过"over",我的意思是鼠标指针位于顶级窗口的客户端矩形内,并且在鼠标指针位置的窗口上没有其他顶级窗口.换句话说,如果用户点击该事件将被发送到我的顶级窗口(或其子窗口之一).

我使用Windows Forms在C#中编写,但我不介意使用p/invoke来进行Win32调用.

c# winapi winforms

5
推荐指数
1
解决办法
3199
查看次数

我如何确定为什么 emacs 缩进了一定数量?

在 Emacs 中,我正在编辑一些源代码,然后点击 <tab>。Emacs 将行缩进到 n 个空格。我想更改那种行的缩进量。我如何弄清楚 emacs 应用什么规则将该行缩进 n 个空格?

我想改变n,但我需要弄清楚Emacs刚刚使用了许多与缩进相关的变量中的哪一个。

emacs elisp

4
推荐指数
1
解决办法
695
查看次数

在Python中一次迭代String字

我有一个巨大的文本文件的字符串缓冲区.我必须在字符串缓冲区中搜索给定的单词/短语.什么是有效的方法呢?

我尝试使用re模块匹配.但由于我有一个巨大的文本语料库,我必须搜索.这需要花费大量时间.

给出单词和短语词典.

我遍历每个文件,将其读入字符串,搜索字典中的所有单词和短语,并在找到键时增加字典中的计数.

我们认为的一个小优化是将短语/单词的字典排序为最大单词数.然后比较字符串缓冲区中的每个单词起始位置并比较单词列表.如果找到一个短语,我们不会搜索其他短语(因为它匹配最长的短语,这是我们想要的)

有人可以建议如何在字符串缓冲区中逐字逐句.(逐字迭代字符串缓冲区)?

此外,还有其他优化可以做到吗?

data = str(file_content)
for j in dictionary_entity.keys():
    cnt = data.count(j+" ")
    if cnt != -1:
        dictionary_entity[j] = dictionary_entity[j] + cnt
f.close()
Run Code Online (Sandbox Code Playgroud)

python string string-matching

3
推荐指数
1
解决办法
1万
查看次数

f(n)= n + f(floor(n/2))是否有封闭形式?

我有以下递推公式:

  f(0) = 0
  f(1) = 1
  f(n) = n + f(floor(n/2))
Run Code Online (Sandbox Code Playgroud)

可以用代码表示为:

  int f(int n) {
    int s = 0;
    for (; n; n >>= 1)
      s += n;
    return s;
  }
Run Code Online (Sandbox Code Playgroud)

是否有封闭形式允许我f(n)一步计算?

如果没有,我还能做些什么来f(n)更快地计算?

c performance recurrence

2
推荐指数
1
解决办法
736
查看次数