gpt4 book ai didi

bash - 如何使用 system() 从 Perl 调用 gnuplot one-liner?

转载 作者:行者123 更新时间:2023-11-29 09:42:13 26 4
gpt4 key购买 nike

我想要一个 Perl 脚本来显示一个简单的 gnuplot 图表。我不想在文件中存储任何数据,我想使用 gnuplot 单行代码,例如:

gnuplot -p <(echo -e 'plot "-"\n1 1\n2 3\n3 1.7\n4.5 5\ne')

显示点 (1, 1)、(2, 3)、(3, 1.7) 和 (4.5, 5)。

在 Perl 脚本中,我尝试了类似的事情

$plotString  = "\"<(echo -e 'plot \\\"-\\\"\\n";
$plotString .= "1 1\\n2 3\\n3 1.7\\n4.5 5\\ne')\"";
system('gnuplot -p ' . $plotString);

但我收到以下错误:

-e plot "-"
^
"<(echo -e 'plot "-"\n1 1\n2 3\n3 1.7\n4.5 5\ne')", line 1: invalid command

这个错误让我感到惊讶,因为字符串传递给 system()错误消息中引用的 显然是正确的。

知道如何修改$plotString所以system()能正确解释 gnuplot 命令吗?

第二个问题:如何绘制图表with lines ? (即使在 Perl 之外,我也无法使用 gnuplot 单行代码来完成此操作。)

编辑:我的操作系统是 Ubuntu 16.04。

最佳答案

system($shell_cmd)

的缩写
system('/bin/sh', '-c', $shell_cmd)

但是您所拥有的不是有效的 sh 命令,而是 bash 命令。这意味着您需要调用 bash

my $cmd = q{gnuplot -p <(echo -e 'plot "-"\\n1 1\\n2 3\\n3 1.7\\n4.5 5\\ne')};
system('bash', '-c', $cmd)

看来您还可以使用以下方法来避免创建两个 shell:

my $program = <<'__EOS__';
plot "-"
1 1
2 3
3 1.7
4.5 5
e
__EOS__

open(my $pipe, '|-', "gnuplot", "-p")
print($pipe $program);
close($pipe);

关于bash - 如何使用 system() 从 Perl 调用 gnuplot one-liner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47465627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com