小编mar*_*ton的帖子

我应该如何处理Perl方法中的错误,以及从方法中返回什么?

我用一个小模块包装了Perl的Net :: SSH :: Expect,以减少编写用于HP iLO卡的新配置脚本所需的样板代码.虽然我一方面希望这个包装器尽可能精简,但非程序员同事可以使用它,我也希望它尽可能好地编写.

它的使用方式如下:

my $ilo = iLO->new(host => $host, password => $password);
$ilo->login;

$ilo->command("cd /system1");
$ilo->command("set oemhp_server_name=$system_name", 'status=0');
Run Code Online (Sandbox Code Playgroud)

这是iLO::command():

sub command {
    my ($self, $cmd, $response) = @_;

    $response = 'hpiLO-> ' unless defined($response);

    # $self->{ssh} is a Net::SSH::Expect object
    croak "Not logged in!\n" unless ($self->{ssh});

    $self->{ssh}->send($cmd);
    if ($self->{ssh}->waitfor($response, $self->{CMD_TIMEOUT}, '-re')) {
        return {
            before => $self->{ssh}->before(),
            match => $self->{ssh}->match(),
            after => $self->{ssh}->after(),
        };
    } else {
        carp "ERROR: '$cmd' response …
Run Code Online (Sandbox Code Playgroud)

language-agnostic error-handling perl

5
推荐指数
2
解决办法
1229
查看次数

从Linux机器重启Windows服务

我们有一个简陋的旧版Windows应用程序(已在此处进行了讨论),该应用程序将内容从Windows主机复制到许多Linux主机。我们在几个盒子上运行它的几个实例。每个实例都有其自己的.ini文件,其中包含列表目标服务器。通常,我们经常需要更改这些文件的内容并重新启动该过程,该过程由我们的操作团队手动完成。我想用一个简单的基于Web的实用程序(在Linux主机上运行)代替它,该实用程序允许用户生成配置文件,将其发送到主机并重新启动服务。生成文件很容易-我可能会使用Perl和Template Toolkit-并且由于服务器导出其配置目录,因此复制数据也相对容易。

我有哪些重启Windows服务的选项?Win32::Service?我还没有机会看得很远,所以如果您说“ x::y让这变得容易,但要注意z”,您会节省很多时间。可能吗 另外,也许您可​​以提出一种更好的方法来解决此问题(可悲的是,替换软件不是一个!)我并不是在偷懒,只是要避免浪费时间摆弄那些可能无法实现我想要的功能的模块。

windows windows-services

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

这个校验和算法可以改进吗?

我们有一个非常古老的,不受支持的程序,它可以跨SMB共享文件.它有一个校验和算法,用于确定在复制之前文件内容是否已更改.该算法似乎很容易上当 - 我们只是发现了一个例子,其中两个文件,除了一个"1"改为"2"完全相同,返回相同的校验和.这是算法:

unsigned long GetFileCheckSum(CString PathFilename)
{
        FILE* File;
        unsigned long CheckSum = 0;
        unsigned long Data = 0;
        unsigned long Count = 0;

        if ((File = fopen(PathFilename, "rb")) != NULL)
        {
                while (fread(&Data, 1, sizeof(unsigned long), File) != FALSE)
                {
                        CheckSum ^= Data + ++Count;
                        Data = 0;
                }
                fclose(File);
        }
        return CheckSum;
}
Run Code Online (Sandbox Code Playgroud)

我不是一个程序员(我是一个系统管理员),但我知道基于XOR的校验和将非常粗糙.对于具有不同内容的两个相同大小的文件,此算法返回相同校验和的可能性是多少?(我不期待一个确切的答案,"远程"或"非常可能"是好的.)

如果没有巨大的性能影响,它怎么能改进?

最后,这是怎么回事fread()?我快速扫描了文档,但我无法弄清楚.是Data依次设置文件的每个字节?编辑:好的,所以它正在读取文件unsigned long(让我们假设这里有32位操作系统)块.每个块包含什么?如果文件的内容是abcd,Data第一遍的值是多少?是(在Perl中):

(ord('a') << 24) & (ord('b') << 16) & …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm checksum

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

d3.join() 输入调用而不是更新?

我试图通过将新Date对象传递给data()函数,然后join()更新页面,使 D3 每秒更新一次 SVG 元素。我实际上是在一个Observable笔记本中使用的,Promises.tick()但我认为下面的代码(完整源代码)是相关位的粗略近似。我的最终目标是制作一个时钟,但这里的代码是我遇到的问题的最小演示。

这段代码的问题在于从未调用过updatein 函数join()——每次循环时enter都会调用该函数,这会导致text每次都追加一个新的函数。由于我有一个数据和一个元素,我希望join'supdate被调用,而不是enter. 我知道data()( example )上的 key 函数对于确定更改的内容很重要,但我的理解是默认键是数组索引,此处应始终为 0。无论如何,指定不同的键函数(从身份函数到返回常量)都没有帮助。

while (true) {
  var data = [new Date()];

  svg
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
    .selectAll("text")
    .data(data)
    .join(
      enter => enter.append("text").text(d => "enter: " + d),
      update => update.text(d => "update: " + d) …
Run Code Online (Sandbox Code Playgroud)

javascript d3.js observablehq

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