小编use*_*925的帖子

python paramiko模块中长时间运行的ssh命令(以及如何结束它们)

我想tail -f logfile使用python的paramiko模块在远程机器上运行命令.到目前为止,我一直在尝试以下方式:

interface = paramiko.SSHClient()
#snip the connection setup portion
stdin, stdout, stderr = interface.exec_command("tail -f logfile")
#snip into threaded loop
print stdout.readline()
Run Code Online (Sandbox Code Playgroud)

我希望命令在必要时运行,但我有两个问题:

  1. 我该如何干净利落地停下来?我考虑制作一个频道,然后shutdown()在我通过时使用频道上的命令 - 但这看起来很混乱.有可能做一些像发送Ctrl-C到频道的标准输入的东西吗?
  2. readline() 块,如果我有一个非阻塞的输出方法,我可以避免线程 - 任何想法?

python ssh paramiko

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

OSX缺乏memalign

我正在研究C中的一个项目,它需要memalign().真的,posix_memalign()也会这样做,但是darwin/OSX缺少这两者.

什么是鞋拔的良好解决方案?我不理解posix-C代码的许可,如果我要删掉memalign.c并把它放在我的项目中 - 我不希望任何病毒式许可LGPL-ing我的整个项目.

c c++ macos posix

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

何时使用:abbr vs.:map in vi/vim

缩写和map命令似乎都为用户提供了冗余功能.:imap teh the似乎完成了同样的工作:iabbr teh the.我倾向于在:map各种类型的命令中进行所有设置 - 从错字修复到类似脚本的单行.

地图和缩写之间是否存在真正的区别?哪个命令最适合哪个工作?

vi vim macros abbreviation

10
推荐指数
1
解决办法
914
查看次数

C语言中单个花括号代码块的含义

我遇到了一些包含几个代码块的代码,用花括号括起来{}.在代码块之前没有行将它们标记为if语句,函数定义或其他任何内容的一部分.只是一个浮动在函数中间的代码块.这有什么意义吗?gcc通过代码似乎非常高兴; 我只能想象这是允许原始编码器在视觉上分割功能块的某种方式......

c syntax formatting

6
推荐指数
2
解决办法
497
查看次数

阻止对单个mercurial存储库中特定分支的写访问

是否有可能在mercurial中编写某种方式来拒绝影响存储库中特定命名分支的变更集?

我们有一个托管项目,并且希望允许任何开发人员将他们的更改推送到我们的存储库,只要他们在他们自己的命名分支中.这允许我们在同一个存储库中管理单个buildbot和共享沙箱(通过保持分支分开).我们想阻止任何从外部人员写入默认分支的尝试(我们会在内部合并他们的分支).

我们正在考虑使用pretxnchangegroup钩子,但这有两个问题:

1)用户可以使用任何用户名推送更改; 我们基本上只有一个http-auth保护存储库,要求任何用户名或密码实际连接到repo,但它不会检查提交中的用户名,以确保它们与用于推送的帐户匹配.

2)让我们说用户已经完成并在分支中开发,但随后他们在默认分支上进行最后一次提交.的hg push失败.在这一点上,开发人员做了什么来解决他们的问题?

有什么想法吗?

security mercurial

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

python ctypes中的多维char数组(字符串数组)

我正在尝试使用ctypes将一个字符数组数组传递给C函数.

void cfunction(char ** strings)
{
 strings[1] = "bad"; //works not what I need.
 strings[1][2] = 'd'; //this will segfault.
 return;
}

char *input[] = {"foo","bar"};
cfunction(input);
Run Code Online (Sandbox Code Playgroud)

因为我抛出的数组是静态定义的,所以我只是更改了函数声明和输入参数:

void cfunction(char strings[2][4])
{
 //strings[1] = "bad"; //not what I need.
 strings[1][2] = 'd'; //what I need and now it works.
 return;
}

char input[2][4] = {"foo","bar"};
cfunction(input);
Run Code Online (Sandbox Code Playgroud)

现在我遇到了如何在python中定义这个多维字符数组的问题.我以为它会这样:

import os
from ctypes import *
libhello = cdll.LoadLibrary(os.getcwd() + '/libhello.so')
input = (c_char_p * 2)()
input[0] = create_string_buffer("foo")
input[1] = create_string_buffer("bar")
libhello.cfunction(input) …
Run Code Online (Sandbox Code Playgroud)

python ctypes multidimensional-array

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

bash getopts 函数是否对命令行选项具有破坏性?

您可以在同一个脚本中两次使用 bash“getopts”函数吗?

我有一组选项,根据特定选项的值,这些选项意味着不同的事情。由于我不能保证 getopts 会首先评估该特定选项,所以我想运行 getopts 一次,仅使用该特定选项,然后使用其他选项再次运行它。

bash shell

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

Makefile规则取决于文件数量/标题的更改,而不是文件内容的更改

我正在使用makefile来自动生成一些文档.我在一个目录中有几个文件,我的一个makefile规则将生成这些文件的索引页面.文件列表本身是使用动态加载的,list := $(shell ls documents/*.txt)所以每次添加,删除或重命名文档时,我都不必费心手动编辑makefile.当然,我希望索引生成规则在文档目录中的文件的数量/标题发生变化时触发,但我不知道如何设置先决条件以这种方式工作.

我可以使用.PHONY或类似的东西强制索引生成一直运行,但我宁愿不浪费周期.我试过管道ls到一个文件list.txt并使用作为我的索引生成规则的先决条件,但这需要list.txt手动编辑(试图避免它),或者在makefile中自动生成它(这会改变创建时间,所以我不能list.txt在先决条件中使用,因为它每次都会触发规则).

makefile

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

在哪里使用GNU autoconf/automake放置helper-scripts?

我正在开发一个将与GNU autoconf/automake一起分发的项目,我有一组调用awk脚本的bash脚本.我希望bash脚本最终在$ PATH中,但不是awk脚本.我该如何将这些插入到项目中?它们应该与其他二进制文件一起使用吗?

另外,有没有办法在安装后确定文件的最终位置?我认为/ usr/local/bin并不总是可执行文件结束的地方......

automake autoconf

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

在python ctypes中传递字符串数组作为参数

这是python ctypes中多维char数组(字符串数组)的后续内容.我有一个ac函数来操作一个字符串数组.数据类型是静态的,因此这有助于:

void cfunction(char strings[8][1024])
{
 printf("string0 = %s\nstring1 = %s\n",strings[0],strings[1]);
 strings[0][2] = 'd'; //this is just some dumb modification
 strings[1][2] = 'd';
 return;
}
Run Code Online (Sandbox Code Playgroud)

我在python中创建数据类型并使用它如下:

words = ((c_char * 8) * 1024)()
words[0].value = "foo"
words[1].value = "bar"
libhello.cfunction(words)
print words[0].value
print words[1].value
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

string0 = fod
string1 =
fod
bar
Run Code Online (Sandbox Code Playgroud)

看起来我不正确地将单词对象传递给我的C函数; 它不会//看到//第二个数组值,但写入内存中的位置不会导致段错误.

关于声明的单词对象的其他奇怪之处:

  • 单词[0] .value = foo
  • len(单词[0] .value)= 3
  • sizeof(words [0])= 8
  • repr(words [0] .raw)='foo\x00\x00\x00\x00\x00'

为什么一个对象被声明为1024个字符长,给出了截断的sizeof和raw值?

python ctypes pointers

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