【问题标题】:Communication between parent and child process - Perl父子进程之间的通信 - Perl
【发布时间】:2017-12-19 08:02:42
【问题描述】:

我正在终端中运行一个 perl 程序“a.pl”,它需要调用另一个程序“b.pl”,然后将环境转换为 tcl shell。程序“b.pl”设置了我必须在主程序“a.pl”中使用的环境变量,之后我需要在“b.pl”创建的 tcl 环境中运行新命令。请看下面的例子

程序:a.pl

#!/usr/intel/bin/perl -w
    use strict;
    use warnings;

    #turns it to a tcl shell and sets environment variable VERSION
    system ("./b.pl");

    system ("source <tclExecutable> -version $VERSION");

直到我在终端中手动退出 tcl shell,第二个系统命令才会执行。我看过叉子并打开管道,但我不知道该怎么做。我需要在第一个系统命令打开的 tcl shell 中执行第二个命令。我怎样才能做到这一点?

【问题讨论】:

  • 不能在子进程中设置父进程的环境变量。
  • b.pl 如何设置环境变量?
  • 这是我见过的运行 Tcl 脚本的最奇怪的方式。好吧,无论如何这周……
  • 您可能想尝试使用套接字进行通信。另一个简单的解决方案可能是将 b.pl 中的信息写入文本文件,在运行 tcl shell 之前在 a.pl 中处理它

标签: perl tcl fork exec system


【解决方案1】:

您可以使用require 运行b.pl "inside" a.pl。它可以提供您想要的简单脚本。

a.pl

use strict;
use warnings;

our $Version;
require "/.../b.pl"; # full path to b.pl script
print "Version: $Version\n";

b.pl

use strict;
use warnings;

our $Version;
$Version = "YES!";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多