簡體   English   中英

返回並存儲在從 Perl 腳本運行的 python 腳本中計算的變量

[英]Returning and storing a variable calculated in python script that is run from Perl script

我從 Perl 腳本運行 simple.py 腳本。 這是 python 代碼 (TmRD.py):

import sys
from Bio.Seq import Seq
from Bio.SeqUtils import MeltingTemp as mt
def calculate_tm (seq):
    seq_Tm = mt.Tm_NN(seq, nn_table = mt.R_DNA_NN1)
    return seq_Tm
if __name__ == '__main__':
    s = str(sys.argv[1])
    myseq = Seq(s)
    tm = calculate_tm(myseq)

我想返回並存儲在 python 腳本中計算的 tm 參數,在 Perl 腳本中。 這是 Perl 腳本 (test.pl)

#!/usr/bin/perl -w
use strict;
use warnings;
my $arg1 = $ARGV[0];
print "ARG 1: $arg1\n";
my $ret = `/home/tmp/TmRD.py $arg1`;
print "ret $ret\n";

我從控制台運行它,如下所示:

perl /home/tmp/test.pl auucuucgcgga

所以預期的 output 應該是:

ret 30.014854619578273

但是我得到的 output 是:

ret

您需要將 print(tm) 添加到 python 文件的末尾

import sys
from Bio.Seq import Seq
from Bio.SeqUtils import MeltingTemp as mt
def calculate_tm (seq):
    seq_Tm = mt.Tm_NN(seq, nn_table = mt.R_DNA_NN1)
    return seq_Tm
if __name__ == '__main__':
    s = str(sys.argv[1])
    myseq = Seq(s)
    tm = calculate_tm(myseq)
    print(tm)

Another way to achieve this goal is use the inline::python module from cpan, this way you don't have to call python from perl so to speak but have your perl directly call python and pass the variables that way. https://metacpan.org/pod/Inline::Python

在您的情況下(我沒有嘗試過),它將類似於:

#!/usr/bin/perl -w
use strict;
use warnings;
use Inline Python => <<END;
import sys
from Bio.Seq import Seq
from Bio.SeqUtils import MeltingTemp as mt
def calculate_tm (seq):
    seq_Tm = mt.Tm_NN(seq, nn_table = mt.R_DNA_NN1)
    return seq_Tm
END
my $arg1 = $ARGV[0];
print "ARG 1: $arg1\n";
my $ret = calculate_tm($arg1);
print "ret $ret\n";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM