我想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)
我希望命令在必要时运行,但我有两个问题:
shutdown()在我通过时使用频道上的命令 - 但这看起来很混乱.有可能做一些像发送Ctrl-C到频道的标准输入的东西吗?readline() 块,如果我有一个非阻塞的输出方法,我可以避免线程 - 任何想法?我正在研究C中的一个项目,它需要memalign().真的,posix_memalign()也会这样做,但是darwin/OSX缺少这两者.
什么是鞋拔的良好解决方案?我不理解posix-C代码的许可,如果我要删掉memalign.c并把它放在我的项目中 - 我不希望任何病毒式许可LGPL-ing我的整个项目.
缩写和map命令似乎都为用户提供了冗余功能.:imap teh the似乎完成了同样的工作:iabbr teh the.我倾向于在:map各种类型的命令中进行所有设置 - 从错字修复到类似脚本的单行.
地图和缩写之间是否存在真正的区别?哪个命令最适合哪个工作?
我遇到了一些包含几个代码块的代码,用花括号括起来{}.在代码块之前没有行将它们标记为if语句,函数定义或其他任何内容的一部分.只是一个浮动在函数中间的代码块.这有什么意义吗?gcc通过代码似乎非常高兴; 我只能想象这是允许原始编码器在视觉上分割功能块的某种方式......
是否有可能在mercurial中编写某种方式来拒绝影响存储库中特定命名分支的变更集?
我们有一个托管项目,并且希望允许任何开发人员将他们的更改推送到我们的存储库,只要他们在他们自己的命名分支中.这允许我们在同一个存储库中管理单个buildbot和共享沙箱(通过保持分支分开).我们想阻止任何从外部人员写入默认分支的尝试(我们会在内部合并他们的分支).
我们正在考虑使用pretxnchangegroup钩子,但这有两个问题:
1)用户可以使用任何用户名推送更改; 我们基本上只有一个http-auth保护存储库,要求任何用户名或密码实际连接到repo,但它不会检查提交中的用户名,以确保它们与用于推送的帐户匹配.
2)让我们说用户已经完成并在分支中开发,但随后他们在默认分支上进行最后一次提交.的hg push失败.在这一点上,开发人员做了什么来解决他们的问题?
有什么想法吗?
我正在尝试使用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) 您可以在同一个脚本中两次使用 bash“getopts”函数吗?
我有一组选项,根据特定选项的值,这些选项意味着不同的事情。由于我不能保证 getopts 会首先评估该特定选项,所以我想运行 getopts 一次,仅使用该特定选项,然后使用其他选项再次运行它。
我正在使用makefile来自动生成一些文档.我在一个目录中有几个文件,我的一个makefile规则将生成这些文件的索引页面.文件列表本身是使用动态加载的,list := $(shell ls documents/*.txt)所以每次添加,删除或重命名文档时,我都不必费心手动编辑makefile.当然,我希望索引生成规则在文档目录中的文件的数量/标题发生变化时触发,但我不知道如何设置先决条件以这种方式工作.
我可以使用.PHONY或类似的东西强制索引生成一直运行,但我宁愿不浪费周期.我试过管道ls到一个文件list.txt并使用它作为我的索引生成规则的先决条件,但这需要list.txt手动编辑(试图避免它),或者在makefile中自动生成它(这会改变创建时间,所以我不能list.txt在先决条件中使用,因为它每次都会触发规则).
我正在开发一个将与GNU autoconf/automake一起分发的项目,我有一组调用awk脚本的bash脚本.我希望bash脚本最终在$ PATH中,但不是awk脚本.我该如何将这些插入到项目中?它们应该与其他二进制文件一起使用吗?
另外,有没有办法在安装后确定文件的最终位置?我认为/ usr/local/bin并不总是可执行文件结束的地方......
这是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函数; 它不会//看到//第二个数组值,但写入内存中的位置不会导致段错误.
关于声明的单词对象的其他奇怪之处:
为什么一个对象被声明为1024个字符长,给出了截断的sizeof和raw值?