Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
189 views
in Technique[技术] by (71.8m points)

Inline Python support for passing filehandle from perl

While Trying Inline python as a interface from perl to python , I am facing below issue. This is the code where fun is a subroutine inside python and I am trying to call it from perl

test.pl:

use Inline Python => <<END;

def fun(fh):
    print(fh)
END

my $FH;
open($FH, ">", '/tmp/x.cth');
print $FH "hello
";
fun($FH);

When I execute test.pl, It prints "None", and its not able to pass FileHandle to python code. Or passing None to python. Any suggestions how to fix this?

question from:https://stackoverflow.com/questions/65599664/inline-python-support-for-passing-filehandle-from-perl

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You cannot pass a Perl filehandle to Python. But you can try pass a file descriptor:

use feature qw(say);
use strict;
use warnings;
use Inline Python => <<END;
import os
def fun(fd):
    with os.fdopen(int(fd), 'a') as file:
        file.write("Hello from Python")
END

my $fn = 't.txt';
open (my $fh, ">", $fn) or die "Could not open file '$fn': $!";
say $fh "hello";
$fh->flush();
fun(fileno($fh));
close $fh

The content of t.txt after running the script is:

$ cat t.txt
hello
Hello from Python

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...