我有两个脚本,一个是python脚本,一个是perl脚本。
如何让perl脚本运行python脚本,然后再运行它自己呢?
发布于 2011-12-28 17:39:26
像这样的东西应该是有效的:
system("python", "/my/script.py") == 0 or die "Python script returned error $?";
如果需要捕获Python脚本的输出:
open(my $py, "|-", "python2 /my/script.py") or die "Cannot run Python script: $!";
while (<$py>) {
# do something with the input
}
close($py);
如果您想为子流程提供输入,这也是类似的。
发布于 2011-12-28 19:42:43
最好的方法是使用IPC::Open3在系统级执行python脚本。与使用system()相比,这将使代码更安全、更具可读性;
您可以轻松地执行系统命令,使用IPC::Open3对它们进行读写操作,如下所示:
use strict;
use IPC::Open3 ();
use IO::Handle (); #not required but good for portabilty
my $write_handle = IO::Handle->new();
my $read_handle = IO::Handle->new();
my $pid = IPC::Open3::open3($write_handle, $read_handle, '>&STDERR', $python_binary. ' ' . $python_file_path);
if(!$pid){ function_that_records_errors("Error"); }
#read multi-line data from process:
local $/;
my $read_data = readline($read_handle);
#write to python process
print $write_handle 'Something to write to python process';
waitpid($pid, 0); #wait for child process to close before continuing
这将创建一个forked进程来运行python代码。这意味着如果python代码失败,您可以恢复并继续您的程序。
发布于 2011-12-28 17:53:15
如果您需要将结果从一个程序传递到另一个程序,那么从shell脚本运行这两个脚本并使用管道(假设您在Unix环境中)可能会更简单
https://stackoverflow.com/questions/8659226
复制相似问题