小编Thi*_*Not的帖子

如何中断exec并杀死子进程

我正在尝试在PHP CLI脚本中调用长时间运行的shell命令exec().但我不能为我的生活弄清楚如何中断PHP脚本并杀死衍生的子进程.好像我打电话exec(),我的信号处理程序被忽略了.以下代码正如我所期望的那样工作; 如果我将SIGTERM发送到进程,它会SIGTERM立即回复并退出.

<?php
  declare(ticks = 1);

  function sig_handler($signo) {
    switch ($signo) {
      case SIGTERM:
        echo 'SIGTERM' . PHP_EOL;
        flush();
        break;
      default:
    }
  }

  pcntl_signal(SIGTERM, 'sig_handler', false);

  sleep(60);
?>
Run Code Online (Sandbox Code Playgroud)

但是,如果我替换sleep(60);exec('sleep 60');,在睡眠结束之前我不会到达我的信号处理程序.我有两个问题:

  1. 如何获取信号exec(或shell_execproc_open)?
  2. 捕获信号后,如何杀死由此产生的任何子进程exec

php signals exec pcntl

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

为什么不用分号连接多个MySQL查询与Perl DBI一起使用?

我想使用DBI将值插入两个单独的MySQL表中.我试图INSERT通过;在它们之间插入一个将两个工作查询合并为一个:

$dbh->do(q{
    INSERT INTO `testA`(test) values('testvalue111');
    INSERT INTO `testB`(test) values('testvalue222');
});
Run Code Online (Sandbox Code Playgroud)

但我总是得到一个错误:

"INSERT INTO`testB`(测试)值('testvalue222 ......)中的语法错误

如果我将查询分成两个单独的do调用,它就可以工作.但组合查询在phpMyAdmin中工作正常.为什么它在Perl中失败?

mysql perl dbi

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

当我使用"given"时为什么会出现语法错误?

我正在尝试运行以下代码:

foreach my $k (keys %rec) {
    #switch for watchlist figures
    given ($k) { #line 93

        # Code omitted

        when ("p") { #positive breakout
            if ($row{cls} > $rec{$k}) {                       
                $email .= "positive";   
            } # line 104            
        }                       
        when ("n") { #negative breakout
            if ($row{cls} < $rec{$k}) { #line 107
Run Code Online (Sandbox Code Playgroud)

但我得到一个语法错误:

syntax error at check_watch.pl line 93, near ") {"
syntax error at check_watch.pl line 104, near "}"
Unterminated <> operator at check_watch.pl line 107.
Run Code Online (Sandbox Code Playgroud)

为什么?

perl

3
推荐指数
2
解决办法
1189
查看次数

Perl解释器默认使用什么版本?

我写了一个简单的脚本使用given/ when来试用这个功能,但我不断收到编译错误.最后,我use 5.010_001;在脚本的顶部包含了一些内容,认为我的Perl版本太旧了,无法使用given/ when.有效.

然后我打印了我的Perl版本$]并使用它:use 5.018_002;它也起作用了.为什么Perl默认不使用最新安装版本的功能?

perl

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

如何显示当前日期和时间,包括微秒?

我需要在我的程序之一中以以下格式显示日期:

day - month - year "HH:MM:SS". <microseconds>
Run Code Online (Sandbox Code Playgroud)

我正在使用 Perl 5.8,我尝试使用纪元秒并将时间转换为微秒,如下所示:

my $epoch = time();
my $time1 = ($epoch - int($epoch)) *1e6
Run Code Online (Sandbox Code Playgroud)

但我得到这个输出:

25-05-2016 18:20:20.<incorrect number>
Run Code Online (Sandbox Code Playgroud)

perl datetime

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

打包和解包浮点数时,如何消除浮点不准确?

我正在打包一个数字数组,通过UDP使用套接字编程发送到另一个硬件.

当我pack的数字12.2然后unpack它,我得到12.199999892651.当我处理与纬度和经度相关的数字时,我不能有这样的偏差.

这是我写的简单脚本:

use warnings;

use Time::HiRes qw (sleep);

@Data = ( 20.2, 30.23, 40.121, 1, 2, 3, 4, 6. 4, 3.2, 9.9, 0.1, 12.2, 0.99, 7.8, 999, 12.3 );

$myArr = pack('f*', @Data);

print "$myArr\n\n";

@Dec = unpack('f*',$myArr);

print "@Dec";
Run Code Online (Sandbox Code Playgroud)

输出是:

20.2000007629395 30.2299995422363 40.1209983825684 1 2 3 4 6.40000009536743 3.20 000004768372 9.89999961853027 0.100000001490116 12.1999998092651 0.9900000095367 43 7.80000019073486 999 12.3000001907349
Run Code Online (Sandbox Code Playgroud)

有什么方法可以控制精度吗?

perl unpack pack

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

Python相当于Perl $ +又名$ LAST_PAREN_MATCH

(如果这是重复的道歉,但谷歌/搜索是不可能的$+!)

我正在寻找最接近/最好的Perl's $+aka $LAST_PAREN_MATCH.

对于那些不了解Perl的人来说,它的描述如下:

$LAST_PAREN_MATCH
$+      The text matched by the last bracket of the last successful search
        pattern. This is useful if you don't know which one of a set of
        alternative patterns matched.
Run Code Online (Sandbox Code Playgroud)

也就是说,如果我有这样的图案(b)|(a)|(r),然后$+将包含任一b,ar取决于哪个子模式匹配.

我拥有的最好的是

next((g for g in reversed(match.groups(None)) if g is not None),None)[0]
Run Code Online (Sandbox Code Playgroud)

对于长期的Perl黑客而言,这似乎是一个简单的代码.(不是说我不知道​​我可以将它包装在一个函数中last_paren_match(match):-)

python perl regex-group

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

使用 Jest 模拟 React HOC 时出现“无效的钩子调用”

我正在使用react-speech-recognition在我的 React 应用程序中将语音转录为文本。react-speech-recognition 提供了SpeechRecognition高阶组件,它注入了额外的属性,比如browserSupportsSpeechRecognition被封装的组件。

我的 App 组件如下所示:

// src/App.js
import React, { useEffect } from 'react';
import SpeechRecognition from 'react-speech-recognition';

const App = ({ transcript, browserSupportsSpeechRecognition }) => {
    useEffect(() => {
        console.log(`transcript changed: ${transcript}`);
    }, [transcript]);

    if (! browserSupportsSpeechRecognition) {
        return <span className="error">Speech recognition not supported</span>;
    }

    return <span className="transcript">{transcript}</span>;
};

const options = {
    autoStart: false,
    continuous: false
};

export default SpeechRecognition(options)(App);
Run Code Online (Sandbox Code Playgroud)

我编写了一些测试来模拟支持语音识别的浏览器和不支持语音识别的浏览器:

// src/App.spec.js
import React from 'react';
import Enzyme, { …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs enzyme higher-order-components

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

我可以在Chart :: Gnuplot(Perl)中填充一个图吗?

我在Perl中使用Chart :: Gnuplot创建一个图形.当我在绘图区域的最边缘有数据点时,很难看到黑色绘图边框:

没有填充的情节

(你能看到(0,3)和(0,4)边缘的绘图点吗?)

有没有办法用空格填充绘图区域,以便图形边缘的绘图点偏离绘图边界?

而不是这个:

----------
|  +     +
+        |
|     +  |
----------
Run Code Online (Sandbox Code Playgroud)

...我希望它看起来更像这样:

--------------
|    +     + |
| +          |
|       +    |
--------------
Run Code Online (Sandbox Code Playgroud)

perl charts plot gnuplot

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

如何阻止此Perl命令一遍又一遍地打印XML声明?

我在Red Hat Linux中运行以下命令:

perl -ne '
    print "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    while(/(<PRINTKIT FORM_ID=\"PP_WELCOMEKIT\">.*?<\/PRINTKIT>)/g){
        print "<sf><XDF>$1</XDF></sf>"
    };
' $1 > $2.$TS2.postscrub
Run Code Online (Sandbox Code Playgroud)

$2是一个文件名,$TS2只是一个日期.

目前它打印出100行

<?xml version=\"1.0\" encoding=\"utf-8\"?>
Run Code Online (Sandbox Code Playgroud)

当我真的不想让它打印任何一个.

有人可以更改上面的代码来做它正在做的一切,除了不再打印<?xml version=\"1.0\" encoding=\"utf-8\"?>了吗?我已经尝试过删除带有该行的print语句,如下所示:

perl -ne '
    while(/(<PRINTKIT FORM_ID=\"PP_WELCOMEKIT\">.*?<\/PRINTKIT>)/g){ 
        print "<sf><XDF>$1</XDF></sf>"
    };
' $1 > $2.$TS2.postscrub
Run Code Online (Sandbox Code Playgroud)

这样做会使它输出一个0字节的文件,所以我知道它不起作用.

linux perl

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