怎样用perl脚本调用python脚本并传递参数?
本帖最后由 kmarkkk 于 2012-10-19 09:07:00 编辑 现在想实现一个功能就是从perl脚本向python脚本传递参数.
一个叫 p.py 的python脚本 使用 argsparse, 比如接受一个
parser = argparse.ArgumentParser() //建立parser
parser.add_argument('-n', dest = number) //接受n存入 number这个变量
args = parser.parse_args() //得到所有参数
print(args.number) //打印number这个变量
$num = 5
system("python p.py -n $num");
%h = ();
$h{'a'} = "a";
system("python p.py -n $h");
#!/usr/bin/perl -w
use strict;
my %hash = ( 'a'=>'a', 'b'=>'bb', 'c'=>'ccc' );
# 将哈希转换成 Python 那边的字符串表示{'a': 'a', 'b': 'bb', 'c': 'ccc'}
my $strDict = "{";# 开头的大括号
while( (my $key, my $value) = each %hash )
{
$strDict .= "'". $key . "': '" . $value . "',";# 每个元素,如"c': 'ccc',
}
$strDict = substr( $strDict, 0, length( $strDict )-1 );# 将最后一个逗号删掉(不删的话,Python 那边也不会有问题,但还是删掉吧)
$strDict .= "}";# 结尾的大括号
print "$strDict\n";
# 将命令连接起来,记得在哈希字符串两边用双引号包起来
my $cmd = 'python p.py -n "' . $strDict . '"';
system( $cmd );
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import argparse
parser = argparse.ArgumentParser() # 建立parser
parser.add_argument( 'dict', metavar = 'dict_str', type = str,
help = "一个字符串,表示 Python 里的字典。例如 {'a': 'a', 'b': 'bb'} 这种样子,中间的空格可省略。"
"如果没省略空格,记得在命令行里把整个字符串用双引号包起来哦。" )
parser.add_argument( '-n', dest = 'accumulate', action = 'store_const',
const = print, default = print,
help = "将一个 Python 风格的字典字符串转换成字典" )
args = parser.parse_args()# 执行此行之后,在 args.dict 里面就有所需的字符串了
print( args.dict )# 打印字典的字符串表示形式(调试用,可删除)
dict1 = dict( eval( args.dict ) )# 转换成真的字典
print( dict1 )# 看看是不是变成真的字典了
for item in dict1 :
print( item, "->", dict1[item] )
{'c': 'ccc','a': 'a','b': 'bb'}
{'c': 'ccc','a': 'a','b': 'bb'}
{'a': 'a', 'b': 'bb', 'c': 'ccc'}
a -> a
b -> bb
c -> ccc