相关疑难解决方法(0)

使用python的eval()与ast.literal_eval()?

我有一些代码的情况,eval()作为一种可能的解决方案.现在我从来没有使用eval()过,但是,我已经发现了很多关于它可能造成的潜在危险的信息.也就是说,我对使用它非常谨慎.

我的情况是我有一个用户给出的输入:

datamap = raw_input('Provide some data here: ')
Run Code Online (Sandbox Code Playgroud)

哪里datamap需要是字典.我四处搜索,发现eval()可以解决这个问题.我认为在尝试使用数据之前我可以检查输入的类型,这将是一个可行的安全预防措施.

datamap = eval(raw_input('Provide some data here: ')
if not isinstance(datamap, dict):
    return
Run Code Online (Sandbox Code Playgroud)

我仔细阅读了文档,但我仍然不清楚这是否安全.eval在输入或datamap调用变量后立即评估数据吗?

ast模块是.literal_eval()唯一安全的选择吗?

python eval abstract-syntax-tree

154
推荐指数
6
解决办法
14万
查看次数

python argh/argparse:如何将列表作为命令行参数传递?

我正在尝试使用argh库将参数列表传递给python脚本.可以采取以下输入的东西:

./my_script.py my-func --argA blah --argB 1 2 3 4
./my_script.py my-func --argA blah --argB 1
./my_script.py my-func --argA blah --argB 
Run Code Online (Sandbox Code Playgroud)

我的内部代码如下所示:

import argh

@argh.arg('--argA', default="bleh", help='My first arg')
@argh.arg('--argB', default=[], help='A list-type arg--except it\'s not!')
def my_func(args):
    "A function that does something"

    print args.argA
    print args.argB

    for b in args.argB:
        print int(b)*int(b)  #Print the square of each number in the list
    print sum([int(b) for b in args.argB])  #Print the sum of the list

p = argh.ArghParser()
p.add_commands([my_func])
p.dispatch()
Run Code Online (Sandbox Code Playgroud)

这是它的行为方式: …

python command-line-arguments argparse argh

64
推荐指数
1
解决办法
5万
查看次数

如何通过命令行将数组传递给python

我试图将数组传递给python

import sys
arr = sys.argv[1]
print(arr[2])
Run Code Online (Sandbox Code Playgroud)

我的命令是

python3 test.py [1,2,3,4,5] 0
Run Code Online (Sandbox Code Playgroud)

我希望结果呢

2
Run Code Online (Sandbox Code Playgroud)

但是,确实如此

,
Run Code Online (Sandbox Code Playgroud)

python python-3.x

10
推荐指数
2
解决办法
2万
查看次数